|
@@ -152,3 +152,94 @@ static __init void da830_evm_usb_init(void)
|
|
|
*/
|
|
|
ret = da8xx_register_usb20(1000, 3);
|
|
|
if (ret)
|
|
|
+ pr_warning("%s: USB 2.0 registration failed: %d\n",
|
|
|
+ __func__, ret);
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = davinci_cfg_reg_list(da830_evm_usb11_pins);
|
|
|
+ if (ret) {
|
|
|
+ pr_warning("%s: USB 1.1 PinMux setup failed: %d\n",
|
|
|
+ __func__, ret);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = gpio_request(ON_BD_USB_DRV, "ON_BD_USB_DRV");
|
|
|
+ if (ret) {
|
|
|
+ printk(KERN_ERR "%s: failed to request GPIO for USB 1.1 port "
|
|
|
+ "power control: %d\n", __func__, ret);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ gpio_direction_output(ON_BD_USB_DRV, 0);
|
|
|
+
|
|
|
+ ret = gpio_request(ON_BD_USB_OVC, "ON_BD_USB_OVC");
|
|
|
+ if (ret) {
|
|
|
+ printk(KERN_ERR "%s: failed to request GPIO for USB 1.1 port "
|
|
|
+ "over-current indicator: %d\n", __func__, ret);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ gpio_direction_input(ON_BD_USB_OVC);
|
|
|
+
|
|
|
+ ret = da8xx_register_usb11(&da830_evm_usb11_pdata);
|
|
|
+ if (ret)
|
|
|
+ pr_warning("%s: USB 1.1 registration failed: %d\n",
|
|
|
+ __func__, ret);
|
|
|
+}
|
|
|
+
|
|
|
+static struct davinci_uart_config da830_evm_uart_config __initdata = {
|
|
|
+ .enabled_uarts = 0x7,
|
|
|
+};
|
|
|
+
|
|
|
+static const short da830_evm_mcasp1_pins[] = {
|
|
|
+ DA830_AHCLKX1, DA830_ACLKX1, DA830_AFSX1, DA830_AHCLKR1, DA830_AFSR1,
|
|
|
+ DA830_AMUTE1, DA830_AXR1_0, DA830_AXR1_1, DA830_AXR1_2, DA830_AXR1_5,
|
|
|
+ DA830_ACLKR1, DA830_AXR1_6, DA830_AXR1_7, DA830_AXR1_8, DA830_AXR1_10,
|
|
|
+ DA830_AXR1_11,
|
|
|
+ -1
|
|
|
+};
|
|
|
+
|
|
|
+static u8 da830_iis_serializer_direction[] = {
|
|
|
+ RX_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
|
|
|
+ INACTIVE_MODE, TX_MODE, INACTIVE_MODE, INACTIVE_MODE,
|
|
|
+ INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
|
|
|
+};
|
|
|
+
|
|
|
+static struct snd_platform_data da830_evm_snd_data = {
|
|
|
+ .tx_dma_offset = 0x2000,
|
|
|
+ .rx_dma_offset = 0x2000,
|
|
|
+ .op_mode = DAVINCI_MCASP_IIS_MODE,
|
|
|
+ .num_serializer = ARRAY_SIZE(da830_iis_serializer_direction),
|
|
|
+ .tdm_slots = 2,
|
|
|
+ .serial_dir = da830_iis_serializer_direction,
|
|
|
+ .asp_chan_q = EVENTQ_0,
|
|
|
+ .version = MCASP_VERSION_2,
|
|
|
+ .txnumevt = 1,
|
|
|
+ .rxnumevt = 1,
|
|
|
+};
|
|
|
+
|
|
|
+/*
|
|
|
+ * GPIO2[1] is used as MMC_SD_WP and GPIO2[2] as MMC_SD_INS.
|
|
|
+ */
|
|
|
+static const short da830_evm_mmc_sd_pins[] = {
|
|
|
+ DA830_MMCSD_DAT_0, DA830_MMCSD_DAT_1, DA830_MMCSD_DAT_2,
|
|
|
+ DA830_MMCSD_DAT_3, DA830_MMCSD_DAT_4, DA830_MMCSD_DAT_5,
|
|
|
+ DA830_MMCSD_DAT_6, DA830_MMCSD_DAT_7, DA830_MMCSD_CLK,
|
|
|
+ DA830_MMCSD_CMD, DA830_GPIO2_1, DA830_GPIO2_2,
|
|
|
+ -1
|
|
|
+};
|
|
|
+
|
|
|
+#define DA830_MMCSD_WP_PIN GPIO_TO_PIN(2, 1)
|
|
|
+#define DA830_MMCSD_CD_PIN GPIO_TO_PIN(2, 2)
|
|
|
+
|
|
|
+static int da830_evm_mmc_get_ro(int index)
|
|
|
+{
|
|
|
+ return gpio_get_value(DA830_MMCSD_WP_PIN);
|
|
|
+}
|
|
|
+
|
|
|
+static int da830_evm_mmc_get_cd(int index)
|
|
|
+{
|
|
|
+ return !gpio_get_value(DA830_MMCSD_CD_PIN);
|
|
|
+}
|
|
|
+
|
|
|
+static struct davinci_mmc_config da830_evm_mmc_config = {
|
|
|
+ .get_ro = da830_evm_mmc_get_ro,
|
|
|
+ .get_cd = da830_evm_mmc_get_cd,
|