|
@@ -323,3 +323,179 @@ static struct tc3589x_platform_data mop500_tc35892_data = {
|
|
|
static struct lp5521_led_config lp5521_pri_led[] = {
|
|
|
[0] = {
|
|
|
.chan_nr = 0,
|
|
|
+ .led_current = 0x2f,
|
|
|
+ .max_current = 0x5f,
|
|
|
+ },
|
|
|
+ [1] = {
|
|
|
+ .chan_nr = 1,
|
|
|
+ .led_current = 0x2f,
|
|
|
+ .max_current = 0x5f,
|
|
|
+ },
|
|
|
+ [2] = {
|
|
|
+ .chan_nr = 2,
|
|
|
+ .led_current = 0x2f,
|
|
|
+ .max_current = 0x5f,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct lp5521_platform_data __initdata lp5521_pri_data = {
|
|
|
+ .label = "lp5521_pri",
|
|
|
+ .led_config = &lp5521_pri_led[0],
|
|
|
+ .num_channels = 3,
|
|
|
+ .clock_mode = LP5521_CLOCK_EXT,
|
|
|
+};
|
|
|
+
|
|
|
+static struct lp5521_led_config lp5521_sec_led[] = {
|
|
|
+ [0] = {
|
|
|
+ .chan_nr = 0,
|
|
|
+ .led_current = 0x2f,
|
|
|
+ .max_current = 0x5f,
|
|
|
+ },
|
|
|
+ [1] = {
|
|
|
+ .chan_nr = 1,
|
|
|
+ .led_current = 0x2f,
|
|
|
+ .max_current = 0x5f,
|
|
|
+ },
|
|
|
+ [2] = {
|
|
|
+ .chan_nr = 2,
|
|
|
+ .led_current = 0x2f,
|
|
|
+ .max_current = 0x5f,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct lp5521_platform_data __initdata lp5521_sec_data = {
|
|
|
+ .label = "lp5521_sec",
|
|
|
+ .led_config = &lp5521_sec_led[0],
|
|
|
+ .num_channels = 3,
|
|
|
+ .clock_mode = LP5521_CLOCK_EXT,
|
|
|
+};
|
|
|
+
|
|
|
+static struct i2c_board_info __initdata mop500_i2c0_devices[] = {
|
|
|
+ {
|
|
|
+ I2C_BOARD_INFO("tc3589x", 0x42),
|
|
|
+ .irq = NOMADIK_GPIO_TO_IRQ(217),
|
|
|
+ .platform_data = &mop500_tc35892_data,
|
|
|
+ },
|
|
|
+ /* I2C0 devices only available prior to HREFv60 */
|
|
|
+ {
|
|
|
+ I2C_BOARD_INFO("tps61052", 0x33),
|
|
|
+ .platform_data = &mop500_tps61052_data,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+#define NUM_PRE_V60_I2C0_DEVICES 1
|
|
|
+
|
|
|
+static struct i2c_board_info __initdata mop500_i2c2_devices[] = {
|
|
|
+ {
|
|
|
+ /* lp5521 LED driver, 1st device */
|
|
|
+ I2C_BOARD_INFO("lp5521", 0x33),
|
|
|
+ .platform_data = &lp5521_pri_data,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ /* lp5521 LED driver, 2st device */
|
|
|
+ I2C_BOARD_INFO("lp5521", 0x34),
|
|
|
+ .platform_data = &lp5521_sec_data,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ /* Light sensor Rohm BH1780GLI */
|
|
|
+ I2C_BOARD_INFO("bh1780", 0x29),
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static void __init mop500_i2c_init(struct device *parent)
|
|
|
+{
|
|
|
+ db8500_add_i2c0(parent, NULL);
|
|
|
+ db8500_add_i2c1(parent, NULL);
|
|
|
+ db8500_add_i2c2(parent, NULL);
|
|
|
+ db8500_add_i2c3(parent, NULL);
|
|
|
+}
|
|
|
+
|
|
|
+static struct gpio_keys_button mop500_gpio_keys[] = {
|
|
|
+ {
|
|
|
+ .desc = "SFH7741 Proximity Sensor",
|
|
|
+ .type = EV_SW,
|
|
|
+ .code = SW_FRONT_PROXIMITY,
|
|
|
+ .active_low = 0,
|
|
|
+ .can_disable = 1,
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator *prox_regulator;
|
|
|
+static int mop500_prox_activate(struct device *dev);
|
|
|
+static void mop500_prox_deactivate(struct device *dev);
|
|
|
+
|
|
|
+static struct gpio_keys_platform_data mop500_gpio_keys_data = {
|
|
|
+ .buttons = mop500_gpio_keys,
|
|
|
+ .nbuttons = ARRAY_SIZE(mop500_gpio_keys),
|
|
|
+ .enable = mop500_prox_activate,
|
|
|
+ .disable = mop500_prox_deactivate,
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device mop500_gpio_keys_device = {
|
|
|
+ .name = "gpio-keys",
|
|
|
+ .id = 0,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &mop500_gpio_keys_data,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static int mop500_prox_activate(struct device *dev)
|
|
|
+{
|
|
|
+ prox_regulator = regulator_get(&mop500_gpio_keys_device.dev,
|
|
|
+ "vcc");
|
|
|
+ if (IS_ERR(prox_regulator)) {
|
|
|
+ dev_err(&mop500_gpio_keys_device.dev,
|
|
|
+ "no regulator\n");
|
|
|
+ return PTR_ERR(prox_regulator);
|
|
|
+ }
|
|
|
+ regulator_enable(prox_regulator);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static void mop500_prox_deactivate(struct device *dev)
|
|
|
+{
|
|
|
+ regulator_disable(prox_regulator);
|
|
|
+ regulator_put(prox_regulator);
|
|
|
+}
|
|
|
+
|
|
|
+static struct cryp_platform_data u8500_cryp1_platform_data = {
|
|
|
+ .mem_to_engine = {
|
|
|
+ .dir = STEDMA40_MEM_TO_PERIPH,
|
|
|
+ .src_dev_type = STEDMA40_DEV_SRC_MEMORY,
|
|
|
+ .dst_dev_type = DB8500_DMA_DEV48_CAC1_TX,
|
|
|
+ .src_info.data_width = STEDMA40_WORD_WIDTH,
|
|
|
+ .dst_info.data_width = STEDMA40_WORD_WIDTH,
|
|
|
+ .mode = STEDMA40_MODE_LOGICAL,
|
|
|
+ .src_info.psize = STEDMA40_PSIZE_LOG_4,
|
|
|
+ .dst_info.psize = STEDMA40_PSIZE_LOG_4,
|
|
|
+ },
|
|
|
+ .engine_to_mem = {
|
|
|
+ .dir = STEDMA40_PERIPH_TO_MEM,
|
|
|
+ .src_dev_type = DB8500_DMA_DEV48_CAC1_RX,
|
|
|
+ .dst_dev_type = STEDMA40_DEV_DST_MEMORY,
|
|
|
+ .src_info.data_width = STEDMA40_WORD_WIDTH,
|
|
|
+ .dst_info.data_width = STEDMA40_WORD_WIDTH,
|
|
|
+ .mode = STEDMA40_MODE_LOGICAL,
|
|
|
+ .src_info.psize = STEDMA40_PSIZE_LOG_4,
|
|
|
+ .dst_info.psize = STEDMA40_PSIZE_LOG_4,
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+static struct stedma40_chan_cfg u8500_hash_dma_cfg_tx = {
|
|
|
+ .dir = STEDMA40_MEM_TO_PERIPH,
|
|
|
+ .src_dev_type = STEDMA40_DEV_SRC_MEMORY,
|
|
|
+ .dst_dev_type = DB8500_DMA_DEV50_HAC1_TX,
|
|
|
+ .src_info.data_width = STEDMA40_WORD_WIDTH,
|
|
|
+ .dst_info.data_width = STEDMA40_WORD_WIDTH,
|
|
|
+ .mode = STEDMA40_MODE_LOGICAL,
|
|
|
+ .src_info.psize = STEDMA40_PSIZE_LOG_16,
|
|
|
+ .dst_info.psize = STEDMA40_PSIZE_LOG_16,
|
|
|
+};
|
|
|
+
|
|
|
+static struct hash_platform_data u8500_hash1_platform_data = {
|
|
|
+ .mem_to_engine = &u8500_hash_dma_cfg_tx,
|
|
|
+ .dma_filter = stedma40_filter,
|
|
|
+};
|
|
|
+
|
|
|
+/* add any platform devices here - TODO */
|
|
|
+static struct platform_device *mop500_platform_devs[] __initdata = {
|