|
@@ -255,3 +255,114 @@ static struct gpio_led_platform_data trizeps4_led_data = {
|
|
|
.num_leds = ARRAY_SIZE(trizeps4_led),
|
|
|
};
|
|
|
|
|
|
+static struct platform_device leds_devices = {
|
|
|
+ .name = "leds-gpio",
|
|
|
+ .id = -1,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &trizeps4_led_data,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device *trizeps4_devices[] __initdata = {
|
|
|
+ &flash_device,
|
|
|
+ &dm9000_device,
|
|
|
+ &leds_devices,
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device *trizeps4wl_devices[] __initdata = {
|
|
|
+ &flash_device,
|
|
|
+ &leds_devices,
|
|
|
+};
|
|
|
+
|
|
|
+static short trizeps_conxs_bcr;
|
|
|
+
|
|
|
+/* PCCARD power switching supports only 3,3V */
|
|
|
+void board_pcmcia_power(int power)
|
|
|
+{
|
|
|
+ if (power) {
|
|
|
+ /* switch power on, put in reset and enable buffers */
|
|
|
+ trizeps_conxs_bcr |= power;
|
|
|
+ trizeps_conxs_bcr |= ConXS_BCR_CF_RESET;
|
|
|
+ trizeps_conxs_bcr &= ~ConXS_BCR_CF_BUF_EN;
|
|
|
+ BCR_writew(trizeps_conxs_bcr);
|
|
|
+ /* wait a little */
|
|
|
+ udelay(2000);
|
|
|
+ /* take reset away */
|
|
|
+ trizeps_conxs_bcr &= ~ConXS_BCR_CF_RESET;
|
|
|
+ BCR_writew(trizeps_conxs_bcr);
|
|
|
+ udelay(2000);
|
|
|
+ } else {
|
|
|
+ /* put in reset */
|
|
|
+ trizeps_conxs_bcr |= ConXS_BCR_CF_RESET;
|
|
|
+ BCR_writew(trizeps_conxs_bcr);
|
|
|
+ udelay(1000);
|
|
|
+ /* switch power off */
|
|
|
+ trizeps_conxs_bcr &= ~0xf;
|
|
|
+ BCR_writew(trizeps_conxs_bcr);
|
|
|
+ }
|
|
|
+ pr_debug("%s: o%s 0x%x\n", __func__, power ? "n" : "ff",
|
|
|
+ trizeps_conxs_bcr);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(board_pcmcia_power);
|
|
|
+
|
|
|
+/* backlight power switching for LCD panel */
|
|
|
+static void board_backlight_power(int on)
|
|
|
+{
|
|
|
+ if (on)
|
|
|
+ trizeps_conxs_bcr |= ConXS_BCR_L_DISP;
|
|
|
+ else
|
|
|
+ trizeps_conxs_bcr &= ~ConXS_BCR_L_DISP;
|
|
|
+
|
|
|
+ pr_debug("%s: o%s 0x%x\n", __func__, on ? "n" : "ff",
|
|
|
+ trizeps_conxs_bcr);
|
|
|
+ BCR_writew(trizeps_conxs_bcr);
|
|
|
+}
|
|
|
+
|
|
|
+/* a I2C based RTC is known on CONXS board */
|
|
|
+static struct i2c_board_info trizeps4_i2c_devices[] __initdata = {
|
|
|
+ { I2C_BOARD_INFO("rtc-pcf8593", 0x51) }
|
|
|
+};
|
|
|
+
|
|
|
+/****************************************************************************
|
|
|
+ * MMC card slot external to module
|
|
|
+ ****************************************************************************/
|
|
|
+static int trizeps4_mci_init(struct device *dev, irq_handler_t mci_detect_int,
|
|
|
+ void *data)
|
|
|
+{
|
|
|
+ int err;
|
|
|
+
|
|
|
+ err = request_irq(TRIZEPS4_MMC_IRQ, mci_detect_int,
|
|
|
+ IRQF_DISABLED | IRQF_TRIGGER_RISING,
|
|
|
+ "MMC card detect", data);
|
|
|
+ if (err) {
|
|
|
+ printk(KERN_ERR "trizeps4_mci_init: MMC/SD: can't request"
|
|
|
+ "MMC card detect IRQ\n");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static void trizeps4_mci_exit(struct device *dev, void *data)
|
|
|
+{
|
|
|
+ free_irq(TRIZEPS4_MMC_IRQ, data);
|
|
|
+}
|
|
|
+
|
|
|
+static struct pxamci_platform_data trizeps4_mci_platform_data = {
|
|
|
+ .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
|
|
|
+ .detect_delay_ms= 10,
|
|
|
+ .init = trizeps4_mci_init,
|
|
|
+ .exit = trizeps4_mci_exit,
|
|
|
+ .get_ro = NULL, /* write-protection not supported */
|
|
|
+ .setpower = NULL, /* power-switching not supported */
|
|
|
+ .gpio_card_detect = -1,
|
|
|
+ .gpio_card_ro = -1,
|
|
|
+ .gpio_power = -1,
|
|
|
+};
|
|
|
+
|
|
|
+/****************************************************************************
|
|
|
+ * IRDA mode switching on stuart
|
|
|
+ ****************************************************************************/
|
|
|
+#ifndef STATUS_LEDS_ON_STUART_PINS
|
|
|
+static short trizeps_conxs_ircr;
|
|
|
+
|
|
|
+static int trizeps4_irda_startup(struct device *dev)
|