|
@@ -710,3 +710,168 @@ io_exp_setup_sw_fail:
|
|
}
|
|
}
|
|
|
|
|
|
static int da850_evm_bb_expander_teardown(struct i2c_client *client,
|
|
static int da850_evm_bb_expander_teardown(struct i2c_client *client,
|
|
|
|
+ unsigned gpio, unsigned ngpio, void *c)
|
|
|
|
+{
|
|
|
|
+ platform_device_unregister(&da850_evm_bb_leds_device);
|
|
|
|
+ platform_device_unregister(&da850_evm_bb_keys_device);
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static struct pca953x_platform_data da850_evm_ui_expander_info = {
|
|
|
|
+ .gpio_base = DAVINCI_N_GPIO,
|
|
|
|
+ .setup = da850_evm_ui_expander_setup,
|
|
|
|
+ .teardown = da850_evm_ui_expander_teardown,
|
|
|
|
+ .names = da850_evm_ui_exp,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct pca953x_platform_data da850_evm_bb_expander_info = {
|
|
|
|
+ .gpio_base = DA850_BB_EXPANDER_GPIO_BASE,
|
|
|
|
+ .setup = da850_evm_bb_expander_setup,
|
|
|
|
+ .teardown = da850_evm_bb_expander_teardown,
|
|
|
|
+ .names = da850_evm_bb_exp,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct i2c_board_info __initdata da850_evm_i2c_devices[] = {
|
|
|
|
+ {
|
|
|
|
+ I2C_BOARD_INFO("tlv320aic3x", 0x18),
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ I2C_BOARD_INFO("tca6416", 0x20),
|
|
|
|
+ .platform_data = &da850_evm_ui_expander_info,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ I2C_BOARD_INFO("tca6416", 0x21),
|
|
|
|
+ .platform_data = &da850_evm_bb_expander_info,
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct davinci_i2c_platform_data da850_evm_i2c_0_pdata = {
|
|
|
|
+ .bus_freq = 100, /* kHz */
|
|
|
|
+ .bus_delay = 0, /* usec */
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct davinci_uart_config da850_evm_uart_config __initdata = {
|
|
|
|
+ .enabled_uarts = 0x7,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/* davinci da850 evm audio machine driver */
|
|
|
|
+static u8 da850_iis_serializer_direction[] = {
|
|
|
|
+ INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
|
|
|
|
+ INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
|
|
|
|
+ INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, TX_MODE,
|
|
|
|
+ RX_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct snd_platform_data da850_evm_snd_data = {
|
|
|
|
+ .tx_dma_offset = 0x2000,
|
|
|
|
+ .rx_dma_offset = 0x2000,
|
|
|
|
+ .op_mode = DAVINCI_MCASP_IIS_MODE,
|
|
|
|
+ .num_serializer = ARRAY_SIZE(da850_iis_serializer_direction),
|
|
|
|
+ .tdm_slots = 2,
|
|
|
|
+ .serial_dir = da850_iis_serializer_direction,
|
|
|
|
+ .asp_chan_q = EVENTQ_0,
|
|
|
|
+ .ram_chan_q = EVENTQ_1,
|
|
|
|
+ .version = MCASP_VERSION_2,
|
|
|
|
+ .txnumevt = 1,
|
|
|
|
+ .rxnumevt = 1,
|
|
|
|
+ .sram_size_playback = SZ_8K,
|
|
|
|
+ .sram_size_capture = SZ_8K,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static const short da850_evm_mcasp_pins[] __initconst = {
|
|
|
|
+ DA850_AHCLKX, DA850_ACLKX, DA850_AFSX,
|
|
|
|
+ DA850_AHCLKR, DA850_ACLKR, DA850_AFSR, DA850_AMUTE,
|
|
|
|
+ DA850_AXR_11, DA850_AXR_12,
|
|
|
|
+ -1
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static int da850_evm_mmc_get_ro(int index)
|
|
|
|
+{
|
|
|
|
+ return gpio_get_value(DA850_MMCSD_WP_PIN);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static int da850_evm_mmc_get_cd(int index)
|
|
|
|
+{
|
|
|
|
+ return !gpio_get_value(DA850_MMCSD_CD_PIN);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static struct davinci_mmc_config da850_mmc_config = {
|
|
|
|
+ .get_ro = da850_evm_mmc_get_ro,
|
|
|
|
+ .get_cd = da850_evm_mmc_get_cd,
|
|
|
|
+ .wires = 4,
|
|
|
|
+ .max_freq = 50000000,
|
|
|
|
+ .caps = MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED,
|
|
|
|
+ .version = MMC_CTLR_VERSION_2,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static const short da850_evm_mmcsd0_pins[] __initconst = {
|
|
|
|
+ DA850_MMCSD0_DAT_0, DA850_MMCSD0_DAT_1, DA850_MMCSD0_DAT_2,
|
|
|
|
+ DA850_MMCSD0_DAT_3, DA850_MMCSD0_CLK, DA850_MMCSD0_CMD,
|
|
|
|
+ DA850_GPIO4_0, DA850_GPIO4_1,
|
|
|
|
+ -1
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static void da850_panel_power_ctrl(int val)
|
|
|
|
+{
|
|
|
|
+ /* lcd backlight */
|
|
|
|
+ gpio_set_value(DA850_LCD_BL_PIN, val);
|
|
|
|
+
|
|
|
|
+ /* lcd power */
|
|
|
|
+ gpio_set_value(DA850_LCD_PWR_PIN, val);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static int da850_lcd_hw_init(void)
|
|
|
|
+{
|
|
|
|
+ int status;
|
|
|
|
+
|
|
|
|
+ status = gpio_request(DA850_LCD_BL_PIN, "lcd bl\n");
|
|
|
|
+ if (status < 0)
|
|
|
|
+ return status;
|
|
|
|
+
|
|
|
|
+ status = gpio_request(DA850_LCD_PWR_PIN, "lcd pwr\n");
|
|
|
|
+ if (status < 0) {
|
|
|
|
+ gpio_free(DA850_LCD_BL_PIN);
|
|
|
|
+ return status;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ gpio_direction_output(DA850_LCD_BL_PIN, 0);
|
|
|
|
+ gpio_direction_output(DA850_LCD_PWR_PIN, 0);
|
|
|
|
+
|
|
|
|
+ /* Switch off panel power and backlight */
|
|
|
|
+ da850_panel_power_ctrl(0);
|
|
|
|
+
|
|
|
|
+ /* Switch on panel power and backlight */
|
|
|
|
+ da850_panel_power_ctrl(1);
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/* TPS65070 voltage regulator support */
|
|
|
|
+
|
|
|
|
+/* 3.3V */
|
|
|
|
+static struct regulator_consumer_supply tps65070_dcdc1_consumers[] = {
|
|
|
|
+ {
|
|
|
|
+ .supply = "usb0_vdda33",
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .supply = "usb1_vdda33",
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/* 3.3V or 1.8V */
|
|
|
|
+static struct regulator_consumer_supply tps65070_dcdc2_consumers[] = {
|
|
|
|
+ {
|
|
|
|
+ .supply = "dvdd3318_a",
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .supply = "dvdd3318_b",
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .supply = "dvdd3318_c",
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/* 1.2V */
|
|
|
|
+static struct regulator_consumer_supply tps65070_dcdc3_consumers[] = {
|
|
|
|
+ {
|