|
@@ -508,3 +508,128 @@ struct platform_device zeus_max6369_device = {
|
|
|
};
|
|
|
|
|
|
static struct platform_device *zeus_devices[] __initdata = {
|
|
|
+ &zeus_serial_device,
|
|
|
+ &zeus_mtd_devices[0],
|
|
|
+ &zeus_dm9k0_device,
|
|
|
+ &zeus_dm9k1_device,
|
|
|
+ &zeus_sram_device,
|
|
|
+ &zeus_leds_device,
|
|
|
+ &zeus_pcmcia_device,
|
|
|
+ &zeus_max6369_device,
|
|
|
+};
|
|
|
+
|
|
|
+/* AC'97 */
|
|
|
+static pxa2xx_audio_ops_t zeus_ac97_info = {
|
|
|
+ .reset_gpio = 95,
|
|
|
+};
|
|
|
+
|
|
|
+
|
|
|
+/*
|
|
|
+ * USB host
|
|
|
+ */
|
|
|
+
|
|
|
+static int zeus_ohci_init(struct device *dev)
|
|
|
+{
|
|
|
+ int err;
|
|
|
+
|
|
|
+ /* Switch on port 2. */
|
|
|
+ if ((err = gpio_request(ZEUS_USB2_PWREN_GPIO, "USB2_PWREN"))) {
|
|
|
+ dev_err(dev, "Can't request USB2_PWREN\n");
|
|
|
+ return err;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ((err = gpio_direction_output(ZEUS_USB2_PWREN_GPIO, 1))) {
|
|
|
+ gpio_free(ZEUS_USB2_PWREN_GPIO);
|
|
|
+ dev_err(dev, "Can't enable USB2_PWREN\n");
|
|
|
+ return err;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* Port 2 is shared between host and client interface. */
|
|
|
+ UP2OCR = UP2OCR_HXOE | UP2OCR_HXS | UP2OCR_DMPDE | UP2OCR_DPPDE;
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static void zeus_ohci_exit(struct device *dev)
|
|
|
+{
|
|
|
+ /* Power-off port 2 */
|
|
|
+ gpio_direction_output(ZEUS_USB2_PWREN_GPIO, 0);
|
|
|
+ gpio_free(ZEUS_USB2_PWREN_GPIO);
|
|
|
+}
|
|
|
+
|
|
|
+static struct pxaohci_platform_data zeus_ohci_platform_data = {
|
|
|
+ .port_mode = PMM_NPS_MODE,
|
|
|
+ /* Clear Power Control Polarity Low and set Power Sense
|
|
|
+ * Polarity Low. Supply power to USB ports. */
|
|
|
+ .flags = ENABLE_PORT_ALL | POWER_SENSE_LOW,
|
|
|
+ .init = zeus_ohci_init,
|
|
|
+ .exit = zeus_ohci_exit,
|
|
|
+};
|
|
|
+
|
|
|
+/*
|
|
|
+ * Flat Panel
|
|
|
+ */
|
|
|
+
|
|
|
+static void zeus_lcd_power(int on, struct fb_var_screeninfo *si)
|
|
|
+{
|
|
|
+ gpio_set_value(ZEUS_LCD_EN_GPIO, on);
|
|
|
+}
|
|
|
+
|
|
|
+static void zeus_backlight_power(int on)
|
|
|
+{
|
|
|
+ gpio_set_value(ZEUS_BKLEN_GPIO, on);
|
|
|
+}
|
|
|
+
|
|
|
+static int zeus_setup_fb_gpios(void)
|
|
|
+{
|
|
|
+ int err;
|
|
|
+
|
|
|
+ if ((err = gpio_request(ZEUS_LCD_EN_GPIO, "LCD_EN")))
|
|
|
+ goto out_err;
|
|
|
+
|
|
|
+ if ((err = gpio_direction_output(ZEUS_LCD_EN_GPIO, 0)))
|
|
|
+ goto out_err_lcd;
|
|
|
+
|
|
|
+ if ((err = gpio_request(ZEUS_BKLEN_GPIO, "BKLEN")))
|
|
|
+ goto out_err_lcd;
|
|
|
+
|
|
|
+ if ((err = gpio_direction_output(ZEUS_BKLEN_GPIO, 0)))
|
|
|
+ goto out_err_bkl;
|
|
|
+
|
|
|
+ return 0;
|
|
|
+
|
|
|
+out_err_bkl:
|
|
|
+ gpio_free(ZEUS_BKLEN_GPIO);
|
|
|
+out_err_lcd:
|
|
|
+ gpio_free(ZEUS_LCD_EN_GPIO);
|
|
|
+out_err:
|
|
|
+ return err;
|
|
|
+}
|
|
|
+
|
|
|
+static struct pxafb_mode_info zeus_fb_mode_info[] = {
|
|
|
+ {
|
|
|
+ .pixclock = 39722,
|
|
|
+
|
|
|
+ .xres = 640,
|
|
|
+ .yres = 480,
|
|
|
+
|
|
|
+ .bpp = 16,
|
|
|
+
|
|
|
+ .hsync_len = 63,
|
|
|
+ .left_margin = 16,
|
|
|
+ .right_margin = 81,
|
|
|
+
|
|
|
+ .vsync_len = 2,
|
|
|
+ .upper_margin = 12,
|
|
|
+ .lower_margin = 31,
|
|
|
+
|
|
|
+ .sync = 0,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct pxafb_mach_info zeus_fb_info = {
|
|
|
+ .modes = zeus_fb_mode_info,
|
|
|
+ .num_modes = 1,
|
|
|
+ .lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
|
|
|
+ .pxafb_lcd_power = zeus_lcd_power,
|
|
|
+ .pxafb_backlight_power = zeus_backlight_power,
|