|
@@ -683,3 +683,120 @@ static void zeus_power_off(void)
|
|
|
#define zeus_power_off NULL
|
|
|
#endif
|
|
|
|
|
|
+#ifdef CONFIG_APM_EMULATION
|
|
|
+static void zeus_get_power_status(struct apm_power_info *info)
|
|
|
+{
|
|
|
+ /* Power supply is always present */
|
|
|
+ info->ac_line_status = APM_AC_ONLINE;
|
|
|
+ info->battery_status = APM_BATTERY_STATUS_NOT_PRESENT;
|
|
|
+ info->battery_flag = APM_BATTERY_FLAG_NOT_PRESENT;
|
|
|
+}
|
|
|
+
|
|
|
+static inline void zeus_setup_apm(void)
|
|
|
+{
|
|
|
+ apm_get_power_status = zeus_get_power_status;
|
|
|
+}
|
|
|
+#else
|
|
|
+static inline void zeus_setup_apm(void)
|
|
|
+{
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
+static int zeus_get_pcb_info(struct i2c_client *client, unsigned gpio,
|
|
|
+ unsigned ngpio, void *context)
|
|
|
+{
|
|
|
+ int i;
|
|
|
+ u8 pcb_info = 0;
|
|
|
+
|
|
|
+ for (i = 0; i < 8; i++) {
|
|
|
+ int pcb_bit = gpio + i + 8;
|
|
|
+
|
|
|
+ if (gpio_request(pcb_bit, "pcb info")) {
|
|
|
+ dev_err(&client->dev, "Can't request pcb info %d\n", i);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (gpio_direction_input(pcb_bit)) {
|
|
|
+ dev_err(&client->dev, "Can't read pcb info %d\n", i);
|
|
|
+ gpio_free(pcb_bit);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ pcb_info |= !!gpio_get_value(pcb_bit) << i;
|
|
|
+
|
|
|
+ gpio_free(pcb_bit);
|
|
|
+ }
|
|
|
+
|
|
|
+ dev_info(&client->dev, "Zeus PCB version %d issue %d\n",
|
|
|
+ pcb_info >> 4, pcb_info & 0xf);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static struct pca953x_platform_data zeus_pca953x_pdata[] = {
|
|
|
+ [0] = { .gpio_base = ZEUS_EXT0_GPIO_BASE, },
|
|
|
+ [1] = {
|
|
|
+ .gpio_base = ZEUS_EXT1_GPIO_BASE,
|
|
|
+ .setup = zeus_get_pcb_info,
|
|
|
+ },
|
|
|
+ [2] = { .gpio_base = ZEUS_USER_GPIO_BASE, },
|
|
|
+};
|
|
|
+
|
|
|
+static struct i2c_board_info __initdata zeus_i2c_devices[] = {
|
|
|
+ {
|
|
|
+ I2C_BOARD_INFO("pca9535", 0x21),
|
|
|
+ .platform_data = &zeus_pca953x_pdata[0],
|
|
|
+ },
|
|
|
+ {
|
|
|
+ I2C_BOARD_INFO("pca9535", 0x22),
|
|
|
+ .platform_data = &zeus_pca953x_pdata[1],
|
|
|
+ },
|
|
|
+ {
|
|
|
+ I2C_BOARD_INFO("pca9535", 0x20),
|
|
|
+ .platform_data = &zeus_pca953x_pdata[2],
|
|
|
+ .irq = PXA_GPIO_TO_IRQ(ZEUS_EXTGPIO_GPIO),
|
|
|
+ },
|
|
|
+ { I2C_BOARD_INFO("lm75a", 0x48) },
|
|
|
+ { I2C_BOARD_INFO("24c01", 0x50) },
|
|
|
+ { I2C_BOARD_INFO("isl1208", 0x6f) },
|
|
|
+};
|
|
|
+
|
|
|
+static mfp_cfg_t zeus_pin_config[] __initdata = {
|
|
|
+ /* AC97 */
|
|
|
+ GPIO28_AC97_BITCLK,
|
|
|
+ GPIO29_AC97_SDATA_IN_0,
|
|
|
+ GPIO30_AC97_SDATA_OUT,
|
|
|
+ GPIO31_AC97_SYNC,
|
|
|
+
|
|
|
+ GPIO15_nCS_1,
|
|
|
+ GPIO78_nCS_2,
|
|
|
+ GPIO80_nCS_4,
|
|
|
+ GPIO33_nCS_5,
|
|
|
+
|
|
|
+ GPIO22_GPIO,
|
|
|
+ GPIO32_MMC_CLK,
|
|
|
+ GPIO92_MMC_DAT_0,
|
|
|
+ GPIO109_MMC_DAT_1,
|
|
|
+ GPIO110_MMC_DAT_2,
|
|
|
+ GPIO111_MMC_DAT_3,
|
|
|
+ GPIO112_MMC_CMD,
|
|
|
+
|
|
|
+ GPIO88_USBH1_PWR,
|
|
|
+ GPIO89_USBH1_PEN,
|
|
|
+ GPIO119_USBH2_PWR,
|
|
|
+ GPIO120_USBH2_PEN,
|
|
|
+
|
|
|
+ GPIO86_LCD_LDD_16,
|
|
|
+ GPIO87_LCD_LDD_17,
|
|
|
+
|
|
|
+ GPIO102_GPIO,
|
|
|
+ GPIO104_CIF_DD_2,
|
|
|
+ GPIO105_CIF_DD_1,
|
|
|
+
|
|
|
+ GPIO81_SSP3_TXD,
|
|
|
+ GPIO82_SSP3_RXD,
|
|
|
+ GPIO83_SSP3_SFRM,
|
|
|
+ GPIO84_SSP3_SCLK,
|
|
|
+
|
|
|
+ GPIO48_nPOE,
|
|
|
+ GPIO49_nPWE,
|