diff options
| -rw-r--r-- | arch/arm/mach-s3c2410/include/mach/h1940-latch.h | 2 | ||||
| -rw-r--r-- | arch/arm/mach-s3c2410/mach-h1940.c | 80 |
2 files changed, 66 insertions, 16 deletions
diff --git a/arch/arm/mach-s3c2410/include/mach/h1940-latch.h b/arch/arm/mach-s3c2410/include/mach/h1940-latch.h index ef7d8cf4174d..97e42bfce81e 100644 --- a/arch/arm/mach-s3c2410/include/mach/h1940-latch.h +++ b/arch/arm/mach-s3c2410/include/mach/h1940-latch.h | |||
| @@ -20,7 +20,7 @@ | |||
| 20 | 20 | ||
| 21 | /* SD layer latch */ | 21 | /* SD layer latch */ |
| 22 | 22 | ||
| 23 | #define H1940_LATCH_SDQ1 H1940_LATCH_GPIO(0) | 23 | #define H1940_LATCH_LCD_P0 H1940_LATCH_GPIO(0) |
| 24 | #define H1940_LATCH_LCD_P1 H1940_LATCH_GPIO(1) | 24 | #define H1940_LATCH_LCD_P1 H1940_LATCH_GPIO(1) |
| 25 | #define H1940_LATCH_LCD_P2 H1940_LATCH_GPIO(2) | 25 | #define H1940_LATCH_LCD_P2 H1940_LATCH_GPIO(2) |
| 26 | #define H1940_LATCH_LCD_P3 H1940_LATCH_GPIO(3) | 26 | #define H1940_LATCH_LCD_P3 H1940_LATCH_GPIO(3) |
diff --git a/arch/arm/mach-s3c2410/mach-h1940.c b/arch/arm/mach-s3c2410/mach-h1940.c index cc8660ec8844..974c6e4fb6ad 100644 --- a/arch/arm/mach-s3c2410/mach-h1940.c +++ b/arch/arm/mach-s3c2410/mach-h1940.c | |||
| @@ -106,13 +106,7 @@ static struct s3c2410_uartcfg h1940_uartcfgs[] __initdata = { | |||
| 106 | 106 | ||
| 107 | /* Board control latch control */ | 107 | /* Board control latch control */ |
| 108 | 108 | ||
| 109 | static unsigned int latch_state = H1940_LATCH_BIT(H1940_LATCH_LCD_P4) | | 109 | static unsigned int latch_state; |
| 110 | H1940_LATCH_BIT(H1940_LATCH_SM803_ENABLE) | | ||
| 111 | H1940_LATCH_BIT(H1940_LATCH_SDQ1) | | ||
| 112 | H1940_LATCH_BIT(H1940_LATCH_LCD_P1) | | ||
| 113 | H1940_LATCH_BIT(H1940_LATCH_LCD_P2) | | ||
| 114 | H1940_LATCH_BIT(H1940_LATCH_LCD_P3) | | ||
| 115 | H1940_LATCH_BIT(H1940_LATCH_MAX1698_nSHUTDOWN); | ||
| 116 | 110 | ||
| 117 | static void h1940_latch_control(unsigned int clear, unsigned int set) | 111 | static void h1940_latch_control(unsigned int clear, unsigned int set) |
| 118 | { | 112 | { |
| @@ -275,15 +269,32 @@ static int h1940_backlight_init(struct device *dev) | |||
| 275 | gpio_direction_output(S3C2410_GPB(0), 0); | 269 | gpio_direction_output(S3C2410_GPB(0), 0); |
| 276 | s3c_gpio_setpull(S3C2410_GPB(0), S3C_GPIO_PULL_NONE); | 270 | s3c_gpio_setpull(S3C2410_GPB(0), S3C_GPIO_PULL_NONE); |
| 277 | s3c_gpio_cfgpin(S3C2410_GPB(0), S3C2410_GPB0_TOUT0); | 271 | s3c_gpio_cfgpin(S3C2410_GPB(0), S3C2410_GPB0_TOUT0); |
| 272 | gpio_set_value(H1940_LATCH_MAX1698_nSHUTDOWN, 1); | ||
| 278 | 273 | ||
| 279 | return 0; | 274 | return 0; |
| 280 | } | 275 | } |
| 281 | 276 | ||
| 277 | static int h1940_backlight_notify(struct device *dev, int brightness) | ||
| 278 | { | ||
| 279 | if (!brightness) { | ||
| 280 | gpio_direction_output(S3C2410_GPB(0), 1); | ||
| 281 | gpio_set_value(H1940_LATCH_MAX1698_nSHUTDOWN, 0); | ||
| 282 | } else { | ||
| 283 | gpio_direction_output(S3C2410_GPB(0), 0); | ||
| 284 | s3c_gpio_setpull(S3C2410_GPB(0), S3C_GPIO_PULL_NONE); | ||
| 285 | s3c_gpio_cfgpin(S3C2410_GPB(0), S3C2410_GPB0_TOUT0); | ||
| 286 | gpio_set_value(H1940_LATCH_MAX1698_nSHUTDOWN, 1); | ||
| 287 | } | ||
| 288 | return brightness; | ||
| 289 | } | ||
| 290 | |||
| 282 | static void h1940_backlight_exit(struct device *dev) | 291 | static void h1940_backlight_exit(struct device *dev) |
| 283 | { | 292 | { |
| 284 | gpio_direction_output(S3C2410_GPB(0), 1); | 293 | gpio_direction_output(S3C2410_GPB(0), 1); |
| 294 | gpio_set_value(H1940_LATCH_MAX1698_nSHUTDOWN, 0); | ||
| 285 | } | 295 | } |
| 286 | 296 | ||
| 297 | |||
| 287 | static struct platform_pwm_backlight_data backlight_data = { | 298 | static struct platform_pwm_backlight_data backlight_data = { |
| 288 | .pwm_id = 0, | 299 | .pwm_id = 0, |
| 289 | .max_brightness = 100, | 300 | .max_brightness = 100, |
| @@ -291,6 +302,7 @@ static struct platform_pwm_backlight_data backlight_data = { | |||
| 291 | /* tcnt = 0x31 */ | 302 | /* tcnt = 0x31 */ |
| 292 | .pwm_period_ns = 36296, | 303 | .pwm_period_ns = 36296, |
| 293 | .init = h1940_backlight_init, | 304 | .init = h1940_backlight_init, |
| 305 | .notify = h1940_backlight_notify, | ||
| 294 | .exit = h1940_backlight_exit, | 306 | .exit = h1940_backlight_exit, |
| 295 | }; | 307 | }; |
| 296 | 308 | ||
| @@ -309,19 +321,37 @@ static void h1940_lcd_power_set(struct plat_lcd_data *pd, | |||
| 309 | int value; | 321 | int value; |
| 310 | 322 | ||
| 311 | if (!power) { | 323 | if (!power) { |
| 312 | /* set to 3ec */ | 324 | gpio_set_value(S3C2410_GPC(0), 0); |
| 313 | gpio_direction_output(S3C2410_GPC(0), 0); | ||
| 314 | /* wait for 3ac */ | 325 | /* wait for 3ac */ |
| 315 | do { | 326 | do { |
| 316 | value = gpio_get_value(S3C2410_GPC(6)); | 327 | value = gpio_get_value(S3C2410_GPC(6)); |
| 317 | } while (value); | 328 | } while (value); |
| 318 | /* set to 38c */ | 329 | |
| 319 | gpio_direction_output(S3C2410_GPC(5), 0); | 330 | gpio_set_value(H1940_LATCH_LCD_P2, 0); |
| 331 | gpio_set_value(H1940_LATCH_LCD_P3, 0); | ||
| 332 | gpio_set_value(H1940_LATCH_LCD_P4, 0); | ||
| 333 | |||
| 334 | gpio_direction_output(S3C2410_GPC(1), 0); | ||
| 335 | gpio_direction_output(S3C2410_GPC(4), 0); | ||
| 336 | |||
| 337 | gpio_set_value(H1940_LATCH_LCD_P1, 0); | ||
| 338 | gpio_set_value(H1940_LATCH_LCD_P0, 0); | ||
| 339 | |||
| 340 | gpio_set_value(S3C2410_GPC(5), 0); | ||
| 341 | |||
| 320 | } else { | 342 | } else { |
| 321 | /* Set to 3ac */ | 343 | gpio_set_value(H1940_LATCH_LCD_P0, 1); |
| 322 | gpio_direction_output(S3C2410_GPC(5), 1); | 344 | gpio_set_value(H1940_LATCH_LCD_P1, 1); |
| 323 | /* Set to 3ad */ | 345 | |
| 324 | gpio_direction_output(S3C2410_GPC(0), 1); | 346 | s3c_gpio_cfgpin(S3C2410_GPC(1), S3C_GPIO_SFN(2)); |
| 347 | s3c_gpio_cfgpin(S3C2410_GPC(4), S3C_GPIO_SFN(2)); | ||
| 348 | |||
| 349 | gpio_set_value(S3C2410_GPC(5), 1); | ||
| 350 | gpio_set_value(S3C2410_GPC(0), 1); | ||
| 351 | |||
| 352 | gpio_set_value(H1940_LATCH_LCD_P3, 1); | ||
| 353 | gpio_set_value(H1940_LATCH_LCD_P2, 1); | ||
| 354 | gpio_set_value(H1940_LATCH_LCD_P4, 1); | ||
| 325 | } | 355 | } |
| 326 | } | 356 | } |
| 327 | 357 | ||
| @@ -366,6 +396,8 @@ static void __init h1940_map_io(void) | |||
| 366 | #endif | 396 | #endif |
| 367 | s3c_pm_init(); | 397 | s3c_pm_init(); |
| 368 | 398 | ||
| 399 | /* Add latch gpio chip, set latch initial value */ | ||
| 400 | h1940_latch_control(0, 0); | ||
| 369 | WARN_ON(gpiochip_add(&h1940_latch_gpiochip)); | 401 | WARN_ON(gpiochip_add(&h1940_latch_gpiochip)); |
| 370 | } | 402 | } |
| 371 | 403 | ||
| @@ -404,9 +436,27 @@ static void __init h1940_init(void) | |||
| 404 | writel(tmp, S3C2410_UPLLCON); | 436 | writel(tmp, S3C2410_UPLLCON); |
| 405 | 437 | ||
| 406 | gpio_request(S3C2410_GPC(0), "LCD power"); | 438 | gpio_request(S3C2410_GPC(0), "LCD power"); |
| 439 | gpio_request(S3C2410_GPC(1), "LCD power"); | ||
| 440 | gpio_request(S3C2410_GPC(4), "LCD power"); | ||
| 407 | gpio_request(S3C2410_GPC(5), "LCD power"); | 441 | gpio_request(S3C2410_GPC(5), "LCD power"); |
| 408 | gpio_request(S3C2410_GPC(6), "LCD power"); | 442 | gpio_request(S3C2410_GPC(6), "LCD power"); |
| 443 | gpio_request(H1940_LATCH_LCD_P0, "LCD power"); | ||
| 444 | gpio_request(H1940_LATCH_LCD_P1, "LCD power"); | ||
| 445 | gpio_request(H1940_LATCH_LCD_P2, "LCD power"); | ||
| 446 | gpio_request(H1940_LATCH_LCD_P3, "LCD power"); | ||
| 447 | gpio_request(H1940_LATCH_LCD_P4, "LCD power"); | ||
| 448 | gpio_request(H1940_LATCH_MAX1698_nSHUTDOWN, "LCD power"); | ||
| 449 | gpio_direction_output(S3C2410_GPC(0), 0); | ||
| 450 | gpio_direction_output(S3C2410_GPC(1), 0); | ||
| 451 | gpio_direction_output(S3C2410_GPC(4), 0); | ||
| 452 | gpio_direction_output(S3C2410_GPC(5), 0); | ||
| 409 | gpio_direction_input(S3C2410_GPC(6)); | 453 | gpio_direction_input(S3C2410_GPC(6)); |
| 454 | gpio_direction_output(H1940_LATCH_LCD_P0, 0); | ||
| 455 | gpio_direction_output(H1940_LATCH_LCD_P1, 0); | ||
| 456 | gpio_direction_output(H1940_LATCH_LCD_P2, 0); | ||
| 457 | gpio_direction_output(H1940_LATCH_LCD_P3, 0); | ||
| 458 | gpio_direction_output(H1940_LATCH_LCD_P4, 0); | ||
| 459 | gpio_direction_output(H1940_LATCH_MAX1698_nSHUTDOWN, 0); | ||
| 410 | 460 | ||
| 411 | gpio_request(H1940_LATCH_USB_DP, "USB pullup"); | 461 | gpio_request(H1940_LATCH_USB_DP, "USB pullup"); |
| 412 | gpio_direction_output(H1940_LATCH_USB_DP, 0); | 462 | gpio_direction_output(H1940_LATCH_USB_DP, 0); |
