[ARM] pxa/palmtx: misc fixes to use generic GPIO API

Signed-off-by: Marek Vasut <marek.vasut@gmail.com>
Signed-off-by: Eric Miao <eric.miao@marvell.com>

authored by Marek Vasut and committed by Eric Miao a730b327 2fd36a5d

+118 -32
+118 -32
arch/arm/mach-pxa/palmtx.c
··· 56 GPIO110_MMC_DAT_2, 57 GPIO111_MMC_DAT_3, 58 GPIO112_MMC_CMD, 59 60 /* AC97 */ 61 GPIO28_AC97_BITCLK, ··· 67 GPIO31_AC97_SYNC, 68 69 /* IrDA */ 70 GPIO46_FICP_RXD, 71 GPIO47_FICP_TXD, 72 ··· 75 GPIO16_PWM0_OUT, 76 77 /* USB */ 78 - GPIO13_GPIO, 79 80 /* PCMCIA */ 81 GPIO48_nPOE, ··· 89 GPIO55_nPREG, 90 GPIO56_nPWAIT, 91 GPIO57_nIOIS16, 92 }; 93 94 /****************************************************************************** ··· 139 int err = 0; 140 141 /* Setup an interrupt for detecting card insert/remove events */ 142 - err = request_irq(IRQ_GPIO_PALMTX_SD_DETECT_N, palmtx_detect_int, 143 - IRQF_DISABLED | IRQF_SAMPLE_RANDOM | 144 IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING, 145 "SD/MMC card detect", data); 146 if (err) { 147 printk(KERN_ERR "%s: cannot request SD/MMC card detect IRQ\n", 148 __func__); 149 - return err; 150 } 151 152 err = gpio_request(GPIO_NR_PALMTX_SD_POWER, "SD_POWER"); 153 if (err) 154 - goto pwr_err; 155 156 err = gpio_request(GPIO_NR_PALMTX_SD_READONLY, "SD_READONLY"); 157 if (err) 158 - goto ro_err; 159 160 printk(KERN_DEBUG "%s: irq registered\n", __func__); 161 162 return 0; 163 164 - ro_err: 165 gpio_free(GPIO_NR_PALMTX_SD_POWER); 166 - pwr_err: 167 - free_irq(IRQ_GPIO_PALMTX_SD_DETECT_N, data); 168 return err; 169 } 170 ··· 189 { 190 gpio_free(GPIO_NR_PALMTX_SD_READONLY); 191 gpio_free(GPIO_NR_PALMTX_SD_POWER); 192 - free_irq(IRQ_GPIO_PALMTX_SD_DETECT_N, data); 193 } 194 195 static void palmtx_mci_power(struct device *dev, unsigned int vdd) ··· 229 230 KEY(3, 0, KEY_RIGHT), 231 KEY(3, 2, KEY_LEFT), 232 - 233 }; 234 235 static struct pxa27x_keypad_platform_data palmtx_keypad_platform_data = { ··· 270 ret = gpio_request(GPIO_NR_PALMTX_BL_POWER, "BL POWER"); 271 if (ret) 272 goto err; 273 ret = gpio_request(GPIO_NR_PALMTX_LCD_POWER, "LCD POWER"); 274 if (ret) 275 goto err2; 276 277 return 0; 278 err2: 279 gpio_free(GPIO_NR_PALMTX_BL_POWER); 280 err: ··· 323 /****************************************************************************** 324 * IrDA 325 ******************************************************************************/ 326 static void palmtx_irda_transceiver_mode(struct device *dev, int mode) 327 { 328 gpio_set_value(GPIO_NR_PALMTX_IR_DISABLE, mode & IR_OFF); ··· 348 } 349 350 static struct pxaficp_platform_data palmtx_ficp_platform_data = { 351 .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF, 352 .transceiver_mode = palmtx_irda_transceiver_mode, 353 }; ··· 357 /****************************************************************************** 358 * UDC 359 ******************************************************************************/ 360 - static void palmtx_udc_command(int cmd) 361 - { 362 - gpio_set_value(GPIO_NR_PALMTX_USB_POWER, !cmd); 363 - udelay(50); 364 - gpio_set_value(GPIO_NR_PALMTX_USB_PULLUP, !cmd); 365 - } 366 - 367 static struct pxa2xx_udc_mach_info palmtx_udc_info __initdata = { 368 .gpio_vbus = GPIO_NR_PALMTX_USB_DETECT_N, 369 .gpio_vbus_inverted = 1, 370 - .udc_command = palmtx_udc_command, 371 }; 372 373 /****************************************************************************** ··· 373 374 ret = gpio_request(GPIO_NR_PALMTX_POWER_DETECT, "CABLE_STATE_AC"); 375 if (ret) 376 - goto err_cs_ac; 377 - 378 - ret = gpio_request(GPIO_NR_PALMTX_USB_DETECT_N, "CABLE_STATE_USB"); 379 if (ret) 380 - goto err_cs_usb; 381 382 return 0; 383 384 - err_cs_usb: 385 gpio_free(GPIO_NR_PALMTX_POWER_DETECT); 386 - err_cs_ac: 387 return ret; 388 } 389 ··· 391 return gpio_get_value(GPIO_NR_PALMTX_POWER_DETECT); 392 } 393 394 - static int palmtx_is_usb_online(void) 395 - { 396 - return !gpio_get_value(GPIO_NR_PALMTX_USB_DETECT_N); 397 - } 398 - 399 static void power_supply_exit(struct device *dev) 400 { 401 - gpio_free(GPIO_NR_PALMTX_USB_DETECT_N); 402 gpio_free(GPIO_NR_PALMTX_POWER_DETECT); 403 } 404 ··· 403 static struct pda_power_pdata power_supply_info = { 404 .init = power_supply_init, 405 .is_ac_online = palmtx_is_ac_online, 406 - .is_usb_online = palmtx_is_usb_online, 407 .exit = power_supply_exit, 408 .supplied_to = palmtx_supplicants, 409 .num_supplicants = ARRAY_SIZE(palmtx_supplicants), ··· 485 iotable_init(palmtx_io_desc, ARRAY_SIZE(palmtx_io_desc)); 486 } 487 488 static void __init palmtx_init(void) 489 { 490 pxa2xx_mfp_config(ARRAY_AND_SIZE(palmtx_pin_config)); 491 492 set_pxa_fb_info(&palmtx_lcd_screen); 493 pxa_set_mci_info(&palmtx_mci_platform_data); 494 pxa_set_udc_info(&palmtx_udc_info); 495 pxa_set_ac97_info(NULL); 496 pxa_set_ficp_info(&palmtx_ficp_platform_data);
··· 56 GPIO110_MMC_DAT_2, 57 GPIO111_MMC_DAT_3, 58 GPIO112_MMC_CMD, 59 + GPIO14_GPIO, /* SD detect */ 60 + GPIO114_GPIO, /* SD power */ 61 + GPIO115_GPIO, /* SD r/o switch */ 62 63 /* AC97 */ 64 GPIO28_AC97_BITCLK, ··· 64 GPIO31_AC97_SYNC, 65 66 /* IrDA */ 67 + GPIO40_GPIO, /* ir disable */ 68 GPIO46_FICP_RXD, 69 GPIO47_FICP_TXD, 70 ··· 71 GPIO16_PWM0_OUT, 72 73 /* USB */ 74 + GPIO13_GPIO, /* usb detect */ 75 + GPIO95_GPIO, /* usb power */ 76 77 /* PCMCIA */ 78 GPIO48_nPOE, ··· 84 GPIO55_nPREG, 85 GPIO56_nPWAIT, 86 GPIO57_nIOIS16, 87 + GPIO94_GPIO, /* wifi power 1 */ 88 + GPIO108_GPIO, /* wifi power 2 */ 89 + GPIO116_GPIO, /* wifi ready */ 90 + 91 + /* MATRIX KEYPAD */ 92 + GPIO100_KP_MKIN_0, 93 + GPIO101_KP_MKIN_1, 94 + GPIO102_KP_MKIN_2, 95 + GPIO97_KP_MKIN_3, 96 + GPIO103_KP_MKOUT_0, 97 + GPIO104_KP_MKOUT_1, 98 + GPIO105_KP_MKOUT_2, 99 + 100 + /* LCD */ 101 + GPIO58_LCD_LDD_0, 102 + GPIO59_LCD_LDD_1, 103 + GPIO60_LCD_LDD_2, 104 + GPIO61_LCD_LDD_3, 105 + GPIO62_LCD_LDD_4, 106 + GPIO63_LCD_LDD_5, 107 + GPIO64_LCD_LDD_6, 108 + GPIO65_LCD_LDD_7, 109 + GPIO66_LCD_LDD_8, 110 + GPIO67_LCD_LDD_9, 111 + GPIO68_LCD_LDD_10, 112 + GPIO69_LCD_LDD_11, 113 + GPIO70_LCD_LDD_12, 114 + GPIO71_LCD_LDD_13, 115 + GPIO72_LCD_LDD_14, 116 + GPIO73_LCD_LDD_15, 117 + GPIO74_LCD_FCLK, 118 + GPIO75_LCD_LCLK, 119 + GPIO76_LCD_PCLK, 120 + GPIO77_LCD_BIAS, 121 + 122 + /* MISC. */ 123 + GPIO10_GPIO, /* hotsync button */ 124 + GPIO12_GPIO, /* power detect */ 125 + GPIO107_GPIO, /* earphone detect */ 126 }; 127 128 /****************************************************************************** ··· 95 int err = 0; 96 97 /* Setup an interrupt for detecting card insert/remove events */ 98 + err = gpio_request(GPIO_NR_PALMTX_SD_DETECT_N, "SD IRQ"); 99 + if (err) 100 + goto err; 101 + err = gpio_direction_input(GPIO_NR_PALMTX_SD_DETECT_N); 102 + if (err) 103 + goto err2; 104 + err = request_irq(gpio_to_irq(GPIO_NR_PALMTX_SD_DETECT_N), 105 + palmtx_detect_int, IRQF_DISABLED | IRQF_SAMPLE_RANDOM | 106 IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING, 107 "SD/MMC card detect", data); 108 if (err) { 109 printk(KERN_ERR "%s: cannot request SD/MMC card detect IRQ\n", 110 __func__); 111 + goto err2; 112 } 113 114 err = gpio_request(GPIO_NR_PALMTX_SD_POWER, "SD_POWER"); 115 if (err) 116 + goto err3; 117 + err = gpio_direction_output(GPIO_NR_PALMTX_SD_POWER, 0); 118 + if (err) 119 + goto err4; 120 121 err = gpio_request(GPIO_NR_PALMTX_SD_READONLY, "SD_READONLY"); 122 if (err) 123 + goto err4; 124 + err = gpio_direction_input(GPIO_NR_PALMTX_SD_READONLY); 125 + if (err) 126 + goto err5; 127 128 printk(KERN_DEBUG "%s: irq registered\n", __func__); 129 130 return 0; 131 132 + err5: 133 + gpio_free(GPIO_NR_PALMTX_SD_READONLY); 134 + err4: 135 gpio_free(GPIO_NR_PALMTX_SD_POWER); 136 + err3: 137 + free_irq(gpio_to_irq(GPIO_NR_PALMTX_SD_DETECT_N), data); 138 + err2: 139 + gpio_free(GPIO_NR_PALMTX_SD_DETECT_N); 140 + err: 141 return err; 142 } 143 ··· 128 { 129 gpio_free(GPIO_NR_PALMTX_SD_READONLY); 130 gpio_free(GPIO_NR_PALMTX_SD_POWER); 131 + free_irq(gpio_to_irq(GPIO_NR_PALMTX_SD_DETECT_N), data); 132 + gpio_free(GPIO_NR_PALMTX_SD_DETECT_N); 133 } 134 135 static void palmtx_mci_power(struct device *dev, unsigned int vdd) ··· 167 168 KEY(3, 0, KEY_RIGHT), 169 KEY(3, 2, KEY_LEFT), 170 }; 171 172 static struct pxa27x_keypad_platform_data palmtx_keypad_platform_data = { ··· 209 ret = gpio_request(GPIO_NR_PALMTX_BL_POWER, "BL POWER"); 210 if (ret) 211 goto err; 212 + ret = gpio_direction_output(GPIO_NR_PALMTX_BL_POWER, 0); 213 + if (ret) 214 + goto err2; 215 ret = gpio_request(GPIO_NR_PALMTX_LCD_POWER, "LCD POWER"); 216 if (ret) 217 goto err2; 218 + ret = gpio_direction_output(GPIO_NR_PALMTX_LCD_POWER, 0); 219 + if (ret) 220 + goto err3; 221 222 return 0; 223 + err3: 224 + gpio_free(GPIO_NR_PALMTX_LCD_POWER); 225 err2: 226 gpio_free(GPIO_NR_PALMTX_BL_POWER); 227 err: ··· 254 /****************************************************************************** 255 * IrDA 256 ******************************************************************************/ 257 + static int palmtx_irda_startup(struct device *dev) 258 + { 259 + int err; 260 + err = gpio_request(GPIO_NR_PALMTX_IR_DISABLE, "IR DISABLE"); 261 + if (err) 262 + goto err; 263 + err = gpio_direction_output(GPIO_NR_PALMTX_IR_DISABLE, 1); 264 + if (err) 265 + gpio_free(GPIO_NR_PALMTX_IR_DISABLE); 266 + err: 267 + return err; 268 + } 269 + 270 + static void palmtx_irda_shutdown(struct device *dev) 271 + { 272 + gpio_free(GPIO_NR_PALMTX_IR_DISABLE); 273 + } 274 + 275 static void palmtx_irda_transceiver_mode(struct device *dev, int mode) 276 { 277 gpio_set_value(GPIO_NR_PALMTX_IR_DISABLE, mode & IR_OFF); ··· 261 } 262 263 static struct pxaficp_platform_data palmtx_ficp_platform_data = { 264 + .startup = palmtx_irda_startup, 265 + .shutdown = palmtx_irda_shutdown, 266 .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF, 267 .transceiver_mode = palmtx_irda_transceiver_mode, 268 }; ··· 268 /****************************************************************************** 269 * UDC 270 ******************************************************************************/ 271 static struct pxa2xx_udc_mach_info palmtx_udc_info __initdata = { 272 .gpio_vbus = GPIO_NR_PALMTX_USB_DETECT_N, 273 .gpio_vbus_inverted = 1, 274 + .gpio_pullup = GPIO_NR_PALMTX_USB_POWER, 275 + .gpio_pullup_inverted = 0, 276 }; 277 278 /****************************************************************************** ··· 290 291 ret = gpio_request(GPIO_NR_PALMTX_POWER_DETECT, "CABLE_STATE_AC"); 292 if (ret) 293 + goto err1; 294 + ret = gpio_direction_input(GPIO_NR_PALMTX_POWER_DETECT); 295 if (ret) 296 + goto err2; 297 298 return 0; 299 300 + err2: 301 gpio_free(GPIO_NR_PALMTX_POWER_DETECT); 302 + err1: 303 return ret; 304 } 305 ··· 309 return gpio_get_value(GPIO_NR_PALMTX_POWER_DETECT); 310 } 311 312 static void power_supply_exit(struct device *dev) 313 { 314 gpio_free(GPIO_NR_PALMTX_POWER_DETECT); 315 } 316 ··· 327 static struct pda_power_pdata power_supply_info = { 328 .init = power_supply_init, 329 .is_ac_online = palmtx_is_ac_online, 330 .exit = power_supply_exit, 331 .supplied_to = palmtx_supplicants, 332 .num_supplicants = ARRAY_SIZE(palmtx_supplicants), ··· 410 iotable_init(palmtx_io_desc, ARRAY_SIZE(palmtx_io_desc)); 411 } 412 413 + /* setup udc GPIOs initial state */ 414 + static void __init palmtx_udc_init(void) 415 + { 416 + if (!gpio_request(GPIO_NR_PALMTX_USB_POWER, "UDC Vbus")) { 417 + gpio_direction_output(GPIO_NR_PALMTX_USB_POWER, 1); 418 + gpio_free(GPIO_NR_PALMTX_USB_POWER); 419 + } 420 + } 421 + 422 + 423 static void __init palmtx_init(void) 424 { 425 pxa2xx_mfp_config(ARRAY_AND_SIZE(palmtx_pin_config)); 426 427 set_pxa_fb_info(&palmtx_lcd_screen); 428 pxa_set_mci_info(&palmtx_mci_platform_data); 429 + palmtx_udc_init(); 430 pxa_set_udc_info(&palmtx_udc_info); 431 pxa_set_ac97_info(NULL); 432 pxa_set_ficp_info(&palmtx_ficp_platform_data);