Loading arch/arm/mach-pxa/tosa.c +63 −25 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ #include <linux/delay.h> #include <linux/gpio_keys.h> #include <linux/input.h> #include <linux/gpio.h> #include <asm/setup.h> #include <asm/memory.h> Loading Loading @@ -166,8 +167,7 @@ static struct resource tosa_scoop_resources[] = { static struct scoop_config tosa_scoop_setup = { .io_dir = TOSA_SCOOP_IO_DIR, .io_out = TOSA_SCOOP_IO_OUT, .gpio_base = TOSA_SCOOP_GPIO_BASE, }; struct platform_device tosascoop_device = { Loading @@ -194,7 +194,7 @@ static struct resource tosa_scoop_jc_resources[] = { static struct scoop_config tosa_scoop_jc_setup = { .io_dir = TOSA_SCOOP_JC_IO_DIR, .io_out = TOSA_SCOOP_JC_IO_OUT, .gpio_base = TOSA_SCOOP_JC_GPIO_BASE, }; struct platform_device tosascoop_jc_device = { Loading Loading @@ -232,20 +232,8 @@ static struct scoop_pcmcia_config tosa_pcmcia_config = { /* * USB Device Controller */ static void tosa_udc_command(int cmd) { switch(cmd) { case PXA2XX_UDC_CMD_CONNECT: set_scoop_gpio(&tosascoop_jc_device.dev,TOSA_SCOOP_JC_USB_PULLUP); break; case PXA2XX_UDC_CMD_DISCONNECT: reset_scoop_gpio(&tosascoop_jc_device.dev,TOSA_SCOOP_JC_USB_PULLUP); break; } } static struct pxa2xx_udc_mach_info udc_info __initdata = { .udc_command = tosa_udc_command, .gpio_pullup = TOSA_GPIO_USB_PULLUP, .gpio_vbus = TOSA_GPIO_USB_IN, .gpio_vbus_inverted = 1, }; Loading @@ -264,9 +252,39 @@ static int tosa_mci_init(struct device *dev, irq_handler_t tosa_detect_int, void err = request_irq(TOSA_IRQ_GPIO_nSD_DETECT, tosa_detect_int, IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, "MMC/SD card detect", data); if (err) if (err) { printk(KERN_ERR "tosa_mci_init: MMC/SD: can't request MMC card detect IRQ\n"); goto err_irq; } err = gpio_request(TOSA_GPIO_SD_WP, "sd_wp"); if (err) { printk(KERN_ERR "tosa_mci_init: can't request SD_WP gpio\n"); goto err_gpio_wp; } err = gpio_direction_input(TOSA_GPIO_SD_WP); if (err) goto err_gpio_wp_dir; err = gpio_request(TOSA_GPIO_PWR_ON, "sd_pwr"); if (err) { printk(KERN_ERR "tosa_mci_init: can't request SD_PWR gpio\n"); goto err_gpio_pwr; } err = gpio_direction_output(TOSA_GPIO_PWR_ON, 0); if (err) goto err_gpio_pwr_dir; return 0; err_gpio_pwr_dir: gpio_free(TOSA_GPIO_PWR_ON); err_gpio_pwr: err_gpio_wp_dir: gpio_free(TOSA_GPIO_SD_WP); err_gpio_wp: free_irq(TOSA_IRQ_GPIO_nSD_DETECT, data); err_irq: return err; } Loading @@ -275,19 +293,21 @@ static void tosa_mci_setpower(struct device *dev, unsigned int vdd) struct pxamci_platform_data* p_d = dev->platform_data; if (( 1 << vdd) & p_d->ocr_mask) { set_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_PWR_ON); gpio_set_value(TOSA_GPIO_PWR_ON, 1); } else { reset_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_PWR_ON); gpio_set_value(TOSA_GPIO_PWR_ON, 0); } } static int tosa_mci_get_ro(struct device *dev) { return (read_scoop_reg(&tosascoop_device.dev, SCOOP_GPWR)&TOSA_SCOOP_SD_WP); return gpio_get_value(TOSA_GPIO_SD_WP); } static void tosa_mci_exit(struct device *dev, void *data) { gpio_free(TOSA_GPIO_PWR_ON); gpio_free(TOSA_GPIO_SD_WP); free_irq(TOSA_IRQ_GPIO_nSD_DETECT, data); } Loading @@ -302,18 +322,36 @@ static struct pxamci_platform_data tosa_mci_platform_data = { /* * Irda */ static void tosa_irda_transceiver_mode(struct device *dev, int mode) static int tosa_irda_startup(struct device *dev) { if (mode & IR_OFF) { reset_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_IR_POWERDWN); } else { set_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_IR_POWERDWN); int ret; ret = gpio_request(TOSA_GPIO_IR_POWERDWN, "IrDA powerdown"); if (ret) return ret; ret = gpio_direction_output(TOSA_GPIO_IR_POWERDWN, 0); if (ret) gpio_free(TOSA_GPIO_IR_POWERDWN); return ret; } static void tosa_irda_shutdown(struct device *dev) { gpio_free(TOSA_GPIO_IR_POWERDWN); } static void tosa_irda_transceiver_mode(struct device *dev, int mode) { gpio_set_value(TOSA_GPIO_IR_POWERDWN, !(mode & IR_OFF)); } static struct pxaficp_platform_data tosa_ficp_platform_data = { .transceiver_cap = IR_SIRMODE | IR_OFF, .transceiver_mode = tosa_irda_transceiver_mode, .startup = tosa_irda_startup, .shutdown = tosa_irda_shutdown, }; /* Loading include/asm-arm/arch-pxa/tosa.h +8 −17 Original line number Diff line number Diff line Loading @@ -23,11 +23,12 @@ /* * SCOOP2 internal GPIOs */ #define TOSA_SCOOP_GPIO_BASE NR_BUILTIN_GPIO #define TOSA_SCOOP_PXA_VCORE1 SCOOP_GPCR_PA11 #define TOSA_SCOOP_TC6393_REST_IN SCOOP_GPCR_PA12 #define TOSA_SCOOP_IR_POWERDWN SCOOP_GPCR_PA13 #define TOSA_SCOOP_SD_WP SCOOP_GPCR_PA14 #define TOSA_SCOOP_PWR_ON SCOOP_GPCR_PA15 #define TOSA_GPIO_IR_POWERDWN (TOSA_SCOOP_GPIO_BASE + 2) #define TOSA_GPIO_SD_WP (TOSA_SCOOP_GPIO_BASE + 3) #define TOSA_GPIO_PWR_ON (TOSA_SCOOP_GPIO_BASE + 4) #define TOSA_SCOOP_AUD_PWR_ON SCOOP_GPCR_PA16 #define TOSA_SCOOP_BT_RESET SCOOP_GPCR_PA17 #define TOSA_SCOOP_BT_PWR_EN SCOOP_GPCR_PA18 Loading @@ -35,7 +36,7 @@ /* GPIO Direction 1 : output mode / 0:input mode */ #define TOSA_SCOOP_IO_DIR ( TOSA_SCOOP_PXA_VCORE1 | TOSA_SCOOP_TC6393_REST_IN | \ TOSA_SCOOP_IR_POWERDWN | TOSA_SCOOP_PWR_ON | TOSA_SCOOP_AUD_PWR_ON |\ TOSA_SCOOP_AUD_PWR_ON |\ TOSA_SCOOP_BT_RESET | TOSA_SCOOP_BT_PWR_EN ) /* GPIO out put level when init 1: Hi */ #define TOSA_SCOOP_IO_OUT ( TOSA_SCOOP_TC6393_REST_IN ) Loading @@ -43,10 +44,11 @@ /* * SCOOP2 jacket GPIOs */ #define TOSA_SCOOP_JC_GPIO_BASE (NR_BUILTIN_GPIO + 12) #define TOSA_SCOOP_JC_BT_LED SCOOP_GPCR_PA11 #define TOSA_SCOOP_JC_NOTE_LED SCOOP_GPCR_PA12 #define TOSA_SCOOP_JC_CHRG_ERR_LED SCOOP_GPCR_PA13 #define TOSA_SCOOP_JC_USB_PULLUP SCOOP_GPCR_PA14 #define TOSA_GPIO_USB_PULLUP (TOSA_SCOOP_JC_GPIO_BASE + 3) #define TOSA_SCOOP_JC_TC6393_SUSPEND SCOOP_GPCR_PA15 #define TOSA_SCOOP_JC_TC3693_L3V_ON SCOOP_GPCR_PA16 #define TOSA_SCOOP_JC_WLAN_DETECT SCOOP_GPCR_PA17 Loading @@ -55,11 +57,9 @@ /* GPIO Direction 1 : output mode / 0:input mode */ #define TOSA_SCOOP_JC_IO_DIR ( TOSA_SCOOP_JC_BT_LED | TOSA_SCOOP_JC_NOTE_LED | \ TOSA_SCOOP_JC_CHRG_ERR_LED | TOSA_SCOOP_JC_USB_PULLUP | \ TOSA_SCOOP_JC_CHRG_ERR_LED | \ TOSA_SCOOP_JC_TC6393_SUSPEND | TOSA_SCOOP_JC_TC3693_L3V_ON | \ TOSA_SCOOP_JC_WLAN_LED | TOSA_SCOOP_JC_CARD_LIMIT_SEL ) /* GPIO out put level when init 1: Hi */ #define TOSA_SCOOP_JC_IO_OUT ( 0 ) /* * Timing Generator Loading @@ -73,15 +73,6 @@ #define TG_PINICTL 0x06 #define TG_HPOSCTL 0x07 /* * LED */ #define TOSA_SCOOP_LED_BLUE TOSA_SCOOP_GPCR_PA11 #define TOSA_SCOOP_LED_GREEN TOSA_SCOOP_GPCR_PA12 #define TOSA_SCOOP_LED_ORANGE TOSA_SCOOP_GPCR_PA13 #define TOSA_SCOOP_LED_WLAN TOSA_SCOOP_GPCR_PA18 /* * PXA GPIOs */ Loading Loading
arch/arm/mach-pxa/tosa.c +63 −25 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ #include <linux/delay.h> #include <linux/gpio_keys.h> #include <linux/input.h> #include <linux/gpio.h> #include <asm/setup.h> #include <asm/memory.h> Loading Loading @@ -166,8 +167,7 @@ static struct resource tosa_scoop_resources[] = { static struct scoop_config tosa_scoop_setup = { .io_dir = TOSA_SCOOP_IO_DIR, .io_out = TOSA_SCOOP_IO_OUT, .gpio_base = TOSA_SCOOP_GPIO_BASE, }; struct platform_device tosascoop_device = { Loading @@ -194,7 +194,7 @@ static struct resource tosa_scoop_jc_resources[] = { static struct scoop_config tosa_scoop_jc_setup = { .io_dir = TOSA_SCOOP_JC_IO_DIR, .io_out = TOSA_SCOOP_JC_IO_OUT, .gpio_base = TOSA_SCOOP_JC_GPIO_BASE, }; struct platform_device tosascoop_jc_device = { Loading Loading @@ -232,20 +232,8 @@ static struct scoop_pcmcia_config tosa_pcmcia_config = { /* * USB Device Controller */ static void tosa_udc_command(int cmd) { switch(cmd) { case PXA2XX_UDC_CMD_CONNECT: set_scoop_gpio(&tosascoop_jc_device.dev,TOSA_SCOOP_JC_USB_PULLUP); break; case PXA2XX_UDC_CMD_DISCONNECT: reset_scoop_gpio(&tosascoop_jc_device.dev,TOSA_SCOOP_JC_USB_PULLUP); break; } } static struct pxa2xx_udc_mach_info udc_info __initdata = { .udc_command = tosa_udc_command, .gpio_pullup = TOSA_GPIO_USB_PULLUP, .gpio_vbus = TOSA_GPIO_USB_IN, .gpio_vbus_inverted = 1, }; Loading @@ -264,9 +252,39 @@ static int tosa_mci_init(struct device *dev, irq_handler_t tosa_detect_int, void err = request_irq(TOSA_IRQ_GPIO_nSD_DETECT, tosa_detect_int, IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, "MMC/SD card detect", data); if (err) if (err) { printk(KERN_ERR "tosa_mci_init: MMC/SD: can't request MMC card detect IRQ\n"); goto err_irq; } err = gpio_request(TOSA_GPIO_SD_WP, "sd_wp"); if (err) { printk(KERN_ERR "tosa_mci_init: can't request SD_WP gpio\n"); goto err_gpio_wp; } err = gpio_direction_input(TOSA_GPIO_SD_WP); if (err) goto err_gpio_wp_dir; err = gpio_request(TOSA_GPIO_PWR_ON, "sd_pwr"); if (err) { printk(KERN_ERR "tosa_mci_init: can't request SD_PWR gpio\n"); goto err_gpio_pwr; } err = gpio_direction_output(TOSA_GPIO_PWR_ON, 0); if (err) goto err_gpio_pwr_dir; return 0; err_gpio_pwr_dir: gpio_free(TOSA_GPIO_PWR_ON); err_gpio_pwr: err_gpio_wp_dir: gpio_free(TOSA_GPIO_SD_WP); err_gpio_wp: free_irq(TOSA_IRQ_GPIO_nSD_DETECT, data); err_irq: return err; } Loading @@ -275,19 +293,21 @@ static void tosa_mci_setpower(struct device *dev, unsigned int vdd) struct pxamci_platform_data* p_d = dev->platform_data; if (( 1 << vdd) & p_d->ocr_mask) { set_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_PWR_ON); gpio_set_value(TOSA_GPIO_PWR_ON, 1); } else { reset_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_PWR_ON); gpio_set_value(TOSA_GPIO_PWR_ON, 0); } } static int tosa_mci_get_ro(struct device *dev) { return (read_scoop_reg(&tosascoop_device.dev, SCOOP_GPWR)&TOSA_SCOOP_SD_WP); return gpio_get_value(TOSA_GPIO_SD_WP); } static void tosa_mci_exit(struct device *dev, void *data) { gpio_free(TOSA_GPIO_PWR_ON); gpio_free(TOSA_GPIO_SD_WP); free_irq(TOSA_IRQ_GPIO_nSD_DETECT, data); } Loading @@ -302,18 +322,36 @@ static struct pxamci_platform_data tosa_mci_platform_data = { /* * Irda */ static void tosa_irda_transceiver_mode(struct device *dev, int mode) static int tosa_irda_startup(struct device *dev) { if (mode & IR_OFF) { reset_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_IR_POWERDWN); } else { set_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_IR_POWERDWN); int ret; ret = gpio_request(TOSA_GPIO_IR_POWERDWN, "IrDA powerdown"); if (ret) return ret; ret = gpio_direction_output(TOSA_GPIO_IR_POWERDWN, 0); if (ret) gpio_free(TOSA_GPIO_IR_POWERDWN); return ret; } static void tosa_irda_shutdown(struct device *dev) { gpio_free(TOSA_GPIO_IR_POWERDWN); } static void tosa_irda_transceiver_mode(struct device *dev, int mode) { gpio_set_value(TOSA_GPIO_IR_POWERDWN, !(mode & IR_OFF)); } static struct pxaficp_platform_data tosa_ficp_platform_data = { .transceiver_cap = IR_SIRMODE | IR_OFF, .transceiver_mode = tosa_irda_transceiver_mode, .startup = tosa_irda_startup, .shutdown = tosa_irda_shutdown, }; /* Loading
include/asm-arm/arch-pxa/tosa.h +8 −17 Original line number Diff line number Diff line Loading @@ -23,11 +23,12 @@ /* * SCOOP2 internal GPIOs */ #define TOSA_SCOOP_GPIO_BASE NR_BUILTIN_GPIO #define TOSA_SCOOP_PXA_VCORE1 SCOOP_GPCR_PA11 #define TOSA_SCOOP_TC6393_REST_IN SCOOP_GPCR_PA12 #define TOSA_SCOOP_IR_POWERDWN SCOOP_GPCR_PA13 #define TOSA_SCOOP_SD_WP SCOOP_GPCR_PA14 #define TOSA_SCOOP_PWR_ON SCOOP_GPCR_PA15 #define TOSA_GPIO_IR_POWERDWN (TOSA_SCOOP_GPIO_BASE + 2) #define TOSA_GPIO_SD_WP (TOSA_SCOOP_GPIO_BASE + 3) #define TOSA_GPIO_PWR_ON (TOSA_SCOOP_GPIO_BASE + 4) #define TOSA_SCOOP_AUD_PWR_ON SCOOP_GPCR_PA16 #define TOSA_SCOOP_BT_RESET SCOOP_GPCR_PA17 #define TOSA_SCOOP_BT_PWR_EN SCOOP_GPCR_PA18 Loading @@ -35,7 +36,7 @@ /* GPIO Direction 1 : output mode / 0:input mode */ #define TOSA_SCOOP_IO_DIR ( TOSA_SCOOP_PXA_VCORE1 | TOSA_SCOOP_TC6393_REST_IN | \ TOSA_SCOOP_IR_POWERDWN | TOSA_SCOOP_PWR_ON | TOSA_SCOOP_AUD_PWR_ON |\ TOSA_SCOOP_AUD_PWR_ON |\ TOSA_SCOOP_BT_RESET | TOSA_SCOOP_BT_PWR_EN ) /* GPIO out put level when init 1: Hi */ #define TOSA_SCOOP_IO_OUT ( TOSA_SCOOP_TC6393_REST_IN ) Loading @@ -43,10 +44,11 @@ /* * SCOOP2 jacket GPIOs */ #define TOSA_SCOOP_JC_GPIO_BASE (NR_BUILTIN_GPIO + 12) #define TOSA_SCOOP_JC_BT_LED SCOOP_GPCR_PA11 #define TOSA_SCOOP_JC_NOTE_LED SCOOP_GPCR_PA12 #define TOSA_SCOOP_JC_CHRG_ERR_LED SCOOP_GPCR_PA13 #define TOSA_SCOOP_JC_USB_PULLUP SCOOP_GPCR_PA14 #define TOSA_GPIO_USB_PULLUP (TOSA_SCOOP_JC_GPIO_BASE + 3) #define TOSA_SCOOP_JC_TC6393_SUSPEND SCOOP_GPCR_PA15 #define TOSA_SCOOP_JC_TC3693_L3V_ON SCOOP_GPCR_PA16 #define TOSA_SCOOP_JC_WLAN_DETECT SCOOP_GPCR_PA17 Loading @@ -55,11 +57,9 @@ /* GPIO Direction 1 : output mode / 0:input mode */ #define TOSA_SCOOP_JC_IO_DIR ( TOSA_SCOOP_JC_BT_LED | TOSA_SCOOP_JC_NOTE_LED | \ TOSA_SCOOP_JC_CHRG_ERR_LED | TOSA_SCOOP_JC_USB_PULLUP | \ TOSA_SCOOP_JC_CHRG_ERR_LED | \ TOSA_SCOOP_JC_TC6393_SUSPEND | TOSA_SCOOP_JC_TC3693_L3V_ON | \ TOSA_SCOOP_JC_WLAN_LED | TOSA_SCOOP_JC_CARD_LIMIT_SEL ) /* GPIO out put level when init 1: Hi */ #define TOSA_SCOOP_JC_IO_OUT ( 0 ) /* * Timing Generator Loading @@ -73,15 +73,6 @@ #define TG_PINICTL 0x06 #define TG_HPOSCTL 0x07 /* * LED */ #define TOSA_SCOOP_LED_BLUE TOSA_SCOOP_GPCR_PA11 #define TOSA_SCOOP_LED_GREEN TOSA_SCOOP_GPCR_PA12 #define TOSA_SCOOP_LED_ORANGE TOSA_SCOOP_GPCR_PA13 #define TOSA_SCOOP_LED_WLAN TOSA_SCOOP_GPCR_PA18 /* * PXA GPIOs */ Loading