diff options
| author | Jiri Kosina <jkosina@suse.cz> | 2011-04-26 04:22:15 -0400 |
|---|---|---|
| committer | Jiri Kosina <jkosina@suse.cz> | 2011-04-26 04:22:59 -0400 |
| commit | 07f9479a40cc778bc1462ada11f95b01360ae4ff (patch) | |
| tree | 0676cf38df3844004bb3ebfd99dfa67a4a8998f5 /arch/arm/mach-omap2 | |
| parent | 9d5e6bdb3013acfb311ab407eeca0b6a6a3dedbf (diff) | |
| parent | cd2e49e90f1cae7726c9a2c54488d881d7f1cd1c (diff) | |
Merge branch 'master' into for-next
Fast-forwarded to current state of Linus' tree as there are patches to be
applied for files that didn't exist on the old branch.
Diffstat (limited to 'arch/arm/mach-omap2')
45 files changed, 894 insertions, 207 deletions
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index eeab35dea07e..b997a35830fc 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig | |||
| @@ -44,6 +44,7 @@ config ARCH_OMAP4 | |||
| 44 | depends on ARCH_OMAP2PLUS | 44 | depends on ARCH_OMAP2PLUS |
| 45 | select CPU_V7 | 45 | select CPU_V7 |
| 46 | select ARM_GIC | 46 | select ARM_GIC |
| 47 | select LOCAL_TIMERS if SMP | ||
| 47 | select PL310_ERRATA_588369 | 48 | select PL310_ERRATA_588369 |
| 48 | select PL310_ERRATA_727915 | 49 | select PL310_ERRATA_727915 |
| 49 | select ARM_ERRATA_720789 | 50 | select ARM_ERRATA_720789 |
diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c index c06eb423c4e4..9afd087cc29c 100644 --- a/arch/arm/mach-omap2/board-3430sdp.c +++ b/arch/arm/mach-omap2/board-3430sdp.c | |||
| @@ -307,9 +307,6 @@ static struct omap_dss_board_info sdp3430_dss_data = { | |||
| 307 | .default_device = &sdp3430_lcd_device, | 307 | .default_device = &sdp3430_lcd_device, |
| 308 | }; | 308 | }; |
| 309 | 309 | ||
| 310 | static struct regulator_consumer_supply sdp3430_vdda_dac_supply = | ||
| 311 | REGULATOR_SUPPLY("vdda_dac", "omapdss"); | ||
| 312 | |||
| 313 | static struct omap_board_config_kernel sdp3430_config[] __initdata = { | 310 | static struct omap_board_config_kernel sdp3430_config[] __initdata = { |
| 314 | }; | 311 | }; |
| 315 | 312 | ||
| @@ -398,12 +395,13 @@ static struct regulator_consumer_supply sdp3430_vaux3_supplies[] = { | |||
| 398 | }; | 395 | }; |
| 399 | 396 | ||
| 400 | static struct regulator_consumer_supply sdp3430_vdda_dac_supplies[] = { | 397 | static struct regulator_consumer_supply sdp3430_vdda_dac_supplies[] = { |
| 401 | REGULATOR_SUPPLY("vdda_dac", "omapdss"), | 398 | REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"), |
| 402 | }; | 399 | }; |
| 403 | 400 | ||
| 404 | /* VPLL2 for digital video outputs */ | 401 | /* VPLL2 for digital video outputs */ |
| 405 | static struct regulator_consumer_supply sdp3430_vpll2_supplies[] = { | 402 | static struct regulator_consumer_supply sdp3430_vpll2_supplies[] = { |
| 406 | REGULATOR_SUPPLY("vdds_dsi", "omapdss"), | 403 | REGULATOR_SUPPLY("vdds_dsi", "omapdss"), |
| 404 | REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"), | ||
| 407 | }; | 405 | }; |
| 408 | 406 | ||
| 409 | static struct regulator_consumer_supply sdp3430_vmmc1_supplies[] = { | 407 | static struct regulator_consumer_supply sdp3430_vmmc1_supplies[] = { |
diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c index 333ceb2c8fb0..56702c5e577f 100644 --- a/arch/arm/mach-omap2/board-4430sdp.c +++ b/arch/arm/mach-omap2/board-4430sdp.c | |||
| @@ -36,6 +36,7 @@ | |||
| 36 | #include <plat/usb.h> | 36 | #include <plat/usb.h> |
| 37 | #include <plat/mmc.h> | 37 | #include <plat/mmc.h> |
| 38 | #include <plat/omap4-keypad.h> | 38 | #include <plat/omap4-keypad.h> |
| 39 | #include <plat/display.h> | ||
| 39 | 40 | ||
| 40 | #include "mux.h" | 41 | #include "mux.h" |
| 41 | #include "hsmmc.h" | 42 | #include "hsmmc.h" |
| @@ -47,6 +48,8 @@ | |||
| 47 | #define ETH_KS8851_QUART 138 | 48 | #define ETH_KS8851_QUART 138 |
| 48 | #define OMAP4_SFH7741_SENSOR_OUTPUT_GPIO 184 | 49 | #define OMAP4_SFH7741_SENSOR_OUTPUT_GPIO 184 |
| 49 | #define OMAP4_SFH7741_ENABLE_GPIO 188 | 50 | #define OMAP4_SFH7741_ENABLE_GPIO 188 |
| 51 | #define HDMI_GPIO_HPD 60 /* Hot plug pin for HDMI */ | ||
| 52 | #define HDMI_GPIO_LS_OE 41 /* Level shifter for HDMI */ | ||
| 50 | 53 | ||
| 51 | static const int sdp4430_keymap[] = { | 54 | static const int sdp4430_keymap[] = { |
| 52 | KEY(0, 0, KEY_E), | 55 | KEY(0, 0, KEY_E), |
| @@ -547,6 +550,12 @@ static struct regulator_init_data sdp4430_vusb = { | |||
| 547 | }, | 550 | }, |
| 548 | }; | 551 | }; |
| 549 | 552 | ||
| 553 | static struct regulator_init_data sdp4430_clk32kg = { | ||
| 554 | .constraints = { | ||
| 555 | .valid_ops_mask = REGULATOR_CHANGE_STATUS, | ||
| 556 | }, | ||
| 557 | }; | ||
| 558 | |||
| 550 | static struct twl4030_platform_data sdp4430_twldata = { | 559 | static struct twl4030_platform_data sdp4430_twldata = { |
| 551 | .irq_base = TWL6030_IRQ_BASE, | 560 | .irq_base = TWL6030_IRQ_BASE, |
| 552 | .irq_end = TWL6030_IRQ_END, | 561 | .irq_end = TWL6030_IRQ_END, |
| @@ -562,6 +571,7 @@ static struct twl4030_platform_data sdp4430_twldata = { | |||
| 562 | .vaux1 = &sdp4430_vaux1, | 571 | .vaux1 = &sdp4430_vaux1, |
| 563 | .vaux2 = &sdp4430_vaux2, | 572 | .vaux2 = &sdp4430_vaux2, |
| 564 | .vaux3 = &sdp4430_vaux3, | 573 | .vaux3 = &sdp4430_vaux3, |
| 574 | .clk32kg = &sdp4430_clk32kg, | ||
| 565 | .usb = &omap4_usbphy_data | 575 | .usb = &omap4_usbphy_data |
| 566 | }; | 576 | }; |
| 567 | 577 | ||
| @@ -621,6 +631,76 @@ static void __init omap_sfh7741prox_init(void) | |||
| 621 | } | 631 | } |
| 622 | } | 632 | } |
| 623 | 633 | ||
| 634 | static void sdp4430_hdmi_mux_init(void) | ||
| 635 | { | ||
| 636 | /* PAD0_HDMI_HPD_PAD1_HDMI_CEC */ | ||
| 637 | omap_mux_init_signal("hdmi_hpd", | ||
| 638 | OMAP_PIN_INPUT_PULLUP); | ||
| 639 | omap_mux_init_signal("hdmi_cec", | ||
| 640 | OMAP_PIN_INPUT_PULLUP); | ||
| 641 | /* PAD0_HDMI_DDC_SCL_PAD1_HDMI_DDC_SDA */ | ||
| 642 | omap_mux_init_signal("hdmi_ddc_scl", | ||
| 643 | OMAP_PIN_INPUT_PULLUP); | ||
| 644 | omap_mux_init_signal("hdmi_ddc_sda", | ||
| 645 | OMAP_PIN_INPUT_PULLUP); | ||
| 646 | } | ||
| 647 | |||
| 648 | static int sdp4430_panel_enable_hdmi(struct omap_dss_device *dssdev) | ||
| 649 | { | ||
| 650 | int status; | ||
| 651 | |||
| 652 | status = gpio_request_one(HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH, | ||
| 653 | "hdmi_gpio_hpd"); | ||
| 654 | if (status) { | ||
| 655 | pr_err("Cannot request GPIO %d\n", HDMI_GPIO_HPD); | ||
| 656 | return status; | ||
| 657 | } | ||
| 658 | status = gpio_request_one(HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH, | ||
| 659 | "hdmi_gpio_ls_oe"); | ||
| 660 | if (status) { | ||
| 661 | pr_err("Cannot request GPIO %d\n", HDMI_GPIO_LS_OE); | ||
| 662 | goto error1; | ||
| 663 | } | ||
| 664 | |||
| 665 | return 0; | ||
| 666 | |||
| 667 | error1: | ||
| 668 | gpio_free(HDMI_GPIO_HPD); | ||
| 669 | |||
| 670 | return status; | ||
| 671 | } | ||
| 672 | |||
| 673 | static void sdp4430_panel_disable_hdmi(struct omap_dss_device *dssdev) | ||
| 674 | { | ||
| 675 | gpio_free(HDMI_GPIO_LS_OE); | ||
| 676 | gpio_free(HDMI_GPIO_HPD); | ||
| 677 | } | ||
| 678 | |||
| 679 | static struct omap_dss_device sdp4430_hdmi_device = { | ||
| 680 | .name = "hdmi", | ||
| 681 | .driver_name = "hdmi_panel", | ||
| 682 | .type = OMAP_DISPLAY_TYPE_HDMI, | ||
| 683 | .platform_enable = sdp4430_panel_enable_hdmi, | ||
| 684 | .platform_disable = sdp4430_panel_disable_hdmi, | ||
| 685 | .channel = OMAP_DSS_CHANNEL_DIGIT, | ||
| 686 | }; | ||
| 687 | |||
| 688 | static struct omap_dss_device *sdp4430_dss_devices[] = { | ||
| 689 | &sdp4430_hdmi_device, | ||
| 690 | }; | ||
| 691 | |||
| 692 | static struct omap_dss_board_info sdp4430_dss_data = { | ||
| 693 | .num_devices = ARRAY_SIZE(sdp4430_dss_devices), | ||
| 694 | .devices = sdp4430_dss_devices, | ||
| 695 | .default_device = &sdp4430_hdmi_device, | ||
| 696 | }; | ||
| 697 | |||
| 698 | void omap_4430sdp_display_init(void) | ||
| 699 | { | ||
| 700 | sdp4430_hdmi_mux_init(); | ||
| 701 | omap_display_init(&sdp4430_dss_data); | ||
| 702 | } | ||
| 703 | |||
| 624 | #ifdef CONFIG_OMAP_MUX | 704 | #ifdef CONFIG_OMAP_MUX |
| 625 | static struct omap_board_mux board_mux[] __initdata = { | 705 | static struct omap_board_mux board_mux[] __initdata = { |
| 626 | OMAP4_MUX(USBB2_ULPITLL_CLK, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT), | 706 | OMAP4_MUX(USBB2_ULPITLL_CLK, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT), |
| @@ -729,6 +809,8 @@ static void __init omap_4430sdp_init(void) | |||
| 729 | status = omap4_keyboard_init(&sdp4430_keypad_data); | 809 | status = omap4_keyboard_init(&sdp4430_keypad_data); |
| 730 | if (status) | 810 | if (status) |
| 731 | pr_err("Keypad initialization failed: %d\n", status); | 811 | pr_err("Keypad initialization failed: %d\n", status); |
| 812 | |||
| 813 | omap_4430sdp_display_init(); | ||
| 732 | } | 814 | } |
| 733 | 815 | ||
| 734 | static void __init omap_4430sdp_map_io(void) | 816 | static void __init omap_4430sdp_map_io(void) |
diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c index 7b5647954c13..02a12b41c0ff 100644 --- a/arch/arm/mach-omap2/board-cm-t35.c +++ b/arch/arm/mach-omap2/board-cm-t35.c | |||
| @@ -488,7 +488,7 @@ static struct regulator_consumer_supply cm_t35_vsim_supply = { | |||
| 488 | }; | 488 | }; |
| 489 | 489 | ||
| 490 | static struct regulator_consumer_supply cm_t35_vdac_supply = | 490 | static struct regulator_consumer_supply cm_t35_vdac_supply = |
| 491 | REGULATOR_SUPPLY("vdda_dac", "omapdss"); | 491 | REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"); |
| 492 | 492 | ||
| 493 | static struct regulator_consumer_supply cm_t35_vdvi_supply = | 493 | static struct regulator_consumer_supply cm_t35_vdvi_supply = |
| 494 | REGULATOR_SUPPLY("vdvi", "omapdss"); | 494 | REGULATOR_SUPPLY("vdvi", "omapdss"); |
diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c index aa27483c493e..65f9fde2c567 100644 --- a/arch/arm/mach-omap2/board-devkit8000.c +++ b/arch/arm/mach-omap2/board-devkit8000.c | |||
| @@ -196,7 +196,7 @@ static struct omap_dss_board_info devkit8000_dss_data = { | |||
| 196 | }; | 196 | }; |
| 197 | 197 | ||
| 198 | static struct regulator_consumer_supply devkit8000_vdda_dac_supply = | 198 | static struct regulator_consumer_supply devkit8000_vdda_dac_supply = |
| 199 | REGULATOR_SUPPLY("vdda_dac", "omapdss"); | 199 | REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"); |
| 200 | 200 | ||
| 201 | static uint32_t board_keymap[] = { | 201 | static uint32_t board_keymap[] = { |
| 202 | KEY(0, 0, KEY_1), | 202 | KEY(0, 0, KEY_1), |
| @@ -277,8 +277,10 @@ static struct twl4030_gpio_platform_data devkit8000_gpio_data = { | |||
| 277 | .setup = devkit8000_twl_gpio_setup, | 277 | .setup = devkit8000_twl_gpio_setup, |
| 278 | }; | 278 | }; |
| 279 | 279 | ||
| 280 | static struct regulator_consumer_supply devkit8000_vpll1_supply = | 280 | static struct regulator_consumer_supply devkit8000_vpll1_supplies[] = { |
| 281 | REGULATOR_SUPPLY("vdds_dsi", "omapdss"); | 281 | REGULATOR_SUPPLY("vdds_dsi", "omapdss"), |
| 282 | REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"), | ||
| 283 | }; | ||
| 282 | 284 | ||
| 283 | /* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */ | 285 | /* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */ |
| 284 | static struct regulator_init_data devkit8000_vmmc1 = { | 286 | static struct regulator_init_data devkit8000_vmmc1 = { |
| @@ -319,8 +321,8 @@ static struct regulator_init_data devkit8000_vpll1 = { | |||
| 319 | .valid_ops_mask = REGULATOR_CHANGE_MODE | 321 | .valid_ops_mask = REGULATOR_CHANGE_MODE |
| 320 | | REGULATOR_CHANGE_STATUS, | 322 | | REGULATOR_CHANGE_STATUS, |
| 321 | }, | 323 | }, |
| 322 | .num_consumer_supplies = 1, | 324 | .num_consumer_supplies = ARRAY_SIZE(devkit8000_vpll1_supplies), |
| 323 | .consumer_supplies = &devkit8000_vpll1_supply, | 325 | .consumer_supplies = devkit8000_vpll1_supplies, |
| 324 | }; | 326 | }; |
| 325 | 327 | ||
| 326 | /* VAUX4 for ads7846 and nubs */ | 328 | /* VAUX4 for ads7846 and nubs */ |
diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c index d3199b4ecdb6..34cf982b9679 100644 --- a/arch/arm/mach-omap2/board-igep0020.c +++ b/arch/arm/mach-omap2/board-igep0020.c | |||
| @@ -485,8 +485,10 @@ static struct omap_dss_board_info igep2_dss_data = { | |||
| 485 | .default_device = &igep2_dvi_device, | 485 | .default_device = &igep2_dvi_device, |
| 486 | }; | 486 | }; |
| 487 | 487 | ||
| 488 | static struct regulator_consumer_supply igep2_vpll2_supply = | 488 | static struct regulator_consumer_supply igep2_vpll2_supplies[] = { |
| 489 | REGULATOR_SUPPLY("vdds_dsi", "omapdss"); | 489 | REGULATOR_SUPPLY("vdds_dsi", "omapdss"), |
| 490 | REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"), | ||
| 491 | }; | ||
| 490 | 492 | ||
| 491 | static struct regulator_init_data igep2_vpll2 = { | 493 | static struct regulator_init_data igep2_vpll2 = { |
| 492 | .constraints = { | 494 | .constraints = { |
| @@ -499,8 +501,8 @@ static struct regulator_init_data igep2_vpll2 = { | |||
| 499 | .valid_ops_mask = REGULATOR_CHANGE_MODE | 501 | .valid_ops_mask = REGULATOR_CHANGE_MODE |
| 500 | | REGULATOR_CHANGE_STATUS, | 502 | | REGULATOR_CHANGE_STATUS, |
| 501 | }, | 503 | }, |
| 502 | .num_consumer_supplies = 1, | 504 | .num_consumer_supplies = ARRAY_SIZE(igep2_vpll2_supplies), |
| 503 | .consumer_supplies = &igep2_vpll2_supply, | 505 | .consumer_supplies = igep2_vpll2_supplies, |
| 504 | }; | 506 | }; |
| 505 | 507 | ||
| 506 | static void __init igep2_display_init(void) | 508 | static void __init igep2_display_init(void) |
| @@ -694,7 +696,7 @@ static void __init igep2_init(void) | |||
| 694 | igep2_init_smsc911x(); | 696 | igep2_init_smsc911x(); |
| 695 | 697 | ||
| 696 | /* | 698 | /* |
| 697 | * WLAN-BT combo module from MuRata wich has a Marvell WLAN | 699 | * WLAN-BT combo module from MuRata which has a Marvell WLAN |
| 698 | * (88W8686) + CSR Bluetooth chipset. Uses SDIO interface. | 700 | * (88W8686) + CSR Bluetooth chipset. Uses SDIO interface. |
| 699 | */ | 701 | */ |
| 700 | igep2_wlan_bt_init(); | 702 | igep2_wlan_bt_init(); |
diff --git a/arch/arm/mach-omap2/board-igep0030.c b/arch/arm/mach-omap2/board-igep0030.c index b10db0e6ee62..2cf86c3cb1a3 100644 --- a/arch/arm/mach-omap2/board-igep0030.c +++ b/arch/arm/mach-omap2/board-igep0030.c | |||
| @@ -440,7 +440,7 @@ static void __init igep3_init(void) | |||
| 440 | igep3_leds_init(); | 440 | igep3_leds_init(); |
| 441 | 441 | ||
| 442 | /* | 442 | /* |
| 443 | * WLAN-BT combo module from MuRata wich has a Marvell WLAN | 443 | * WLAN-BT combo module from MuRata which has a Marvell WLAN |
| 444 | * (88W8686) + CSR Bluetooth chipset. Uses SDIO interface. | 444 | * (88W8686) + CSR Bluetooth chipset. Uses SDIO interface. |
| 445 | */ | 445 | */ |
| 446 | igep3_wifi_bt_init(); | 446 | igep3_wifi_bt_init(); |
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index 7640c054f43b..33007fd4a083 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c | |||
| @@ -232,10 +232,12 @@ static struct omap_dss_board_info beagle_dss_data = { | |||
| 232 | }; | 232 | }; |
| 233 | 233 | ||
| 234 | static struct regulator_consumer_supply beagle_vdac_supply = | 234 | static struct regulator_consumer_supply beagle_vdac_supply = |
| 235 | REGULATOR_SUPPLY("vdda_dac", "omapdss"); | 235 | REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"); |
| 236 | 236 | ||
| 237 | static struct regulator_consumer_supply beagle_vdvi_supply = | 237 | static struct regulator_consumer_supply beagle_vdvi_supplies[] = { |
| 238 | REGULATOR_SUPPLY("vdds_dsi", "omapdss"); | 238 | REGULATOR_SUPPLY("vdds_dsi", "omapdss"), |
| 239 | REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"), | ||
| 240 | }; | ||
| 239 | 241 | ||
| 240 | static void __init beagle_display_init(void) | 242 | static void __init beagle_display_init(void) |
| 241 | { | 243 | { |
| @@ -422,8 +424,8 @@ static struct regulator_init_data beagle_vpll2 = { | |||
| 422 | .valid_ops_mask = REGULATOR_CHANGE_MODE | 424 | .valid_ops_mask = REGULATOR_CHANGE_MODE |
| 423 | | REGULATOR_CHANGE_STATUS, | 425 | | REGULATOR_CHANGE_STATUS, |
| 424 | }, | 426 | }, |
| 425 | .num_consumer_supplies = 1, | 427 | .num_consumer_supplies = ARRAY_SIZE(beagle_vdvi_supplies), |
| 426 | .consumer_supplies = &beagle_vdvi_supply, | 428 | .consumer_supplies = beagle_vdvi_supplies, |
| 427 | }; | 429 | }; |
| 428 | 430 | ||
| 429 | static struct twl4030_usb_data beagle_usb_data = { | 431 | static struct twl4030_usb_data beagle_usb_data = { |
diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c index 0fa2c7b208b1..5a1a916e5cc8 100644 --- a/arch/arm/mach-omap2/board-omap3evm.c +++ b/arch/arm/mach-omap2/board-omap3evm.c | |||
| @@ -542,7 +542,7 @@ static struct twl4030_codec_data omap3evm_codec_data = { | |||
| 542 | }; | 542 | }; |
| 543 | 543 | ||
| 544 | static struct regulator_consumer_supply omap3_evm_vdda_dac_supply = | 544 | static struct regulator_consumer_supply omap3_evm_vdda_dac_supply = |
| 545 | REGULATOR_SUPPLY("vdda_dac", "omapdss"); | 545 | REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"); |
| 546 | 546 | ||
| 547 | /* VDAC for DSS driving S-Video */ | 547 | /* VDAC for DSS driving S-Video */ |
| 548 | static struct regulator_init_data omap3_evm_vdac = { | 548 | static struct regulator_init_data omap3_evm_vdac = { |
| @@ -560,8 +560,10 @@ static struct regulator_init_data omap3_evm_vdac = { | |||
| 560 | }; | 560 | }; |
| 561 | 561 | ||
| 562 | /* VPLL2 for digital video outputs */ | 562 | /* VPLL2 for digital video outputs */ |
| 563 | static struct regulator_consumer_supply omap3_evm_vpll2_supply = | 563 | static struct regulator_consumer_supply omap3_evm_vpll2_supplies[] = { |
| 564 | REGULATOR_SUPPLY("vdds_dsi", "omapdss"); | 564 | REGULATOR_SUPPLY("vdds_dsi", "omapdss"), |
| 565 | REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"), | ||
| 566 | }; | ||
| 565 | 567 | ||
| 566 | static struct regulator_init_data omap3_evm_vpll2 = { | 568 | static struct regulator_init_data omap3_evm_vpll2 = { |
| 567 | .constraints = { | 569 | .constraints = { |
| @@ -573,8 +575,8 @@ static struct regulator_init_data omap3_evm_vpll2 = { | |||
| 573 | .valid_ops_mask = REGULATOR_CHANGE_MODE | 575 | .valid_ops_mask = REGULATOR_CHANGE_MODE |
| 574 | | REGULATOR_CHANGE_STATUS, | 576 | | REGULATOR_CHANGE_STATUS, |
| 575 | }, | 577 | }, |
| 576 | .num_consumer_supplies = 1, | 578 | .num_consumer_supplies = ARRAY_SIZE(omap3_evm_vpll2_supplies), |
| 577 | .consumer_supplies = &omap3_evm_vpll2_supply, | 579 | .consumer_supplies = omap3_evm_vpll2_supplies, |
| 578 | }; | 580 | }; |
| 579 | 581 | ||
| 580 | /* ads7846 on SPI */ | 582 | /* ads7846 on SPI */ |
diff --git a/arch/arm/mach-omap2/board-omap3pandora.c b/arch/arm/mach-omap2/board-omap3pandora.c index 2e5dc21e3477..07dba888f450 100644 --- a/arch/arm/mach-omap2/board-omap3pandora.c +++ b/arch/arm/mach-omap2/board-omap3pandora.c | |||
| @@ -342,11 +342,12 @@ static struct regulator_consumer_supply pandora_vmmc3_supply = | |||
| 342 | REGULATOR_SUPPLY("vmmc", "omap_hsmmc.2"); | 342 | REGULATOR_SUPPLY("vmmc", "omap_hsmmc.2"); |
| 343 | 343 | ||
| 344 | static struct regulator_consumer_supply pandora_vdda_dac_supply = | 344 | static struct regulator_consumer_supply pandora_vdda_dac_supply = |
| 345 | REGULATOR_SUPPLY("vdda_dac", "omapdss"); | 345 | REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"); |
| 346 | 346 | ||
| 347 | static struct regulator_consumer_supply pandora_vdds_supplies[] = { | 347 | static struct regulator_consumer_supply pandora_vdds_supplies[] = { |
| 348 | REGULATOR_SUPPLY("vdds_sdi", "omapdss"), | 348 | REGULATOR_SUPPLY("vdds_sdi", "omapdss"), |
| 349 | REGULATOR_SUPPLY("vdds_dsi", "omapdss"), | 349 | REGULATOR_SUPPLY("vdds_dsi", "omapdss"), |
| 350 | REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"), | ||
| 350 | }; | 351 | }; |
| 351 | 352 | ||
| 352 | static struct regulator_consumer_supply pandora_vcc_lcd_supply = | 353 | static struct regulator_consumer_supply pandora_vcc_lcd_supply = |
diff --git a/arch/arm/mach-omap2/board-omap3stalker.c b/arch/arm/mach-omap2/board-omap3stalker.c index 8ebdbc38b9de..a6e0b9161c99 100644 --- a/arch/arm/mach-omap2/board-omap3stalker.c +++ b/arch/arm/mach-omap2/board-omap3stalker.c | |||
| @@ -439,7 +439,7 @@ static struct twl4030_codec_data omap3stalker_codec_data = { | |||
| 439 | }; | 439 | }; |
| 440 | 440 | ||
| 441 | static struct regulator_consumer_supply omap3_stalker_vdda_dac_supply = | 441 | static struct regulator_consumer_supply omap3_stalker_vdda_dac_supply = |
| 442 | REGULATOR_SUPPLY("vdda_dac", "omapdss"); | 442 | REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"); |
| 443 | 443 | ||
| 444 | /* VDAC for DSS driving S-Video */ | 444 | /* VDAC for DSS driving S-Video */ |
| 445 | static struct regulator_init_data omap3_stalker_vdac = { | 445 | static struct regulator_init_data omap3_stalker_vdac = { |
| @@ -457,8 +457,10 @@ static struct regulator_init_data omap3_stalker_vdac = { | |||
| 457 | }; | 457 | }; |
| 458 | 458 | ||
| 459 | /* VPLL2 for digital video outputs */ | 459 | /* VPLL2 for digital video outputs */ |
| 460 | static struct regulator_consumer_supply omap3_stalker_vpll2_supply = | 460 | static struct regulator_consumer_supply omap3_stalker_vpll2_supplies[] = { |
| 461 | REGULATOR_SUPPLY("vdds_dsi", "omapdss"); | 461 | REGULATOR_SUPPLY("vdds_dsi", "omapdss"), |
| 462 | REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"), | ||
| 463 | }; | ||
| 462 | 464 | ||
| 463 | static struct regulator_init_data omap3_stalker_vpll2 = { | 465 | static struct regulator_init_data omap3_stalker_vpll2 = { |
| 464 | .constraints = { | 466 | .constraints = { |
| @@ -471,8 +473,8 @@ static struct regulator_init_data omap3_stalker_vpll2 = { | |||
| 471 | .valid_ops_mask = REGULATOR_CHANGE_MODE | 473 | .valid_ops_mask = REGULATOR_CHANGE_MODE |
| 472 | | REGULATOR_CHANGE_STATUS, | 474 | | REGULATOR_CHANGE_STATUS, |
| 473 | }, | 475 | }, |
| 474 | .num_consumer_supplies = 1, | 476 | .num_consumer_supplies = ARRAY_SIZE(omap3_stalker_vpll2_supplies), |
| 475 | .consumer_supplies = &omap3_stalker_vpll2_supply, | 477 | .consumer_supplies = omap3_stalker_vpll2_supplies, |
| 476 | }; | 478 | }; |
| 477 | 479 | ||
| 478 | static struct twl4030_platform_data omap3stalker_twldata = { | 480 | static struct twl4030_platform_data omap3stalker_twldata = { |
diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c index 0f4d8a762a70..f3a7b1011914 100644 --- a/arch/arm/mach-omap2/board-omap4panda.c +++ b/arch/arm/mach-omap2/board-omap4panda.c | |||
| @@ -34,11 +34,13 @@ | |||
| 34 | #include <asm/mach-types.h> | 34 | #include <asm/mach-types.h> |
| 35 | #include <asm/mach/arch.h> | 35 | #include <asm/mach/arch.h> |
| 36 | #include <asm/mach/map.h> | 36 | #include <asm/mach/map.h> |
| 37 | #include <plat/display.h> | ||
| 37 | 38 | ||
| 38 | #include <plat/board.h> | 39 | #include <plat/board.h> |
| 39 | #include <plat/common.h> | 40 | #include <plat/common.h> |
| 40 | #include <plat/usb.h> | 41 | #include <plat/usb.h> |
| 41 | #include <plat/mmc.h> | 42 | #include <plat/mmc.h> |
| 43 | #include <plat/panel-generic-dpi.h> | ||
| 42 | #include "timer-gp.h" | 44 | #include "timer-gp.h" |
| 43 | 45 | ||
| 44 | #include "hsmmc.h" | 46 | #include "hsmmc.h" |
| @@ -49,6 +51,8 @@ | |||
| 49 | #define GPIO_HUB_NRESET 62 | 51 | #define GPIO_HUB_NRESET 62 |
| 50 | #define GPIO_WIFI_PMENA 43 | 52 | #define GPIO_WIFI_PMENA 43 |
| 51 | #define GPIO_WIFI_IRQ 53 | 53 | #define GPIO_WIFI_IRQ 53 |
| 54 | #define HDMI_GPIO_HPD 60 /* Hot plug pin for HDMI */ | ||
| 55 | #define HDMI_GPIO_LS_OE 41 /* Level shifter for HDMI */ | ||
| 52 | 56 | ||
| 53 | /* wl127x BT, FM, GPS connectivity chip */ | 57 | /* wl127x BT, FM, GPS connectivity chip */ |
| 54 | static int wl1271_gpios[] = {46, -1, -1}; | 58 | static int wl1271_gpios[] = {46, -1, -1}; |
| @@ -281,19 +285,6 @@ static int __init omap4_twl6030_hsmmc_init(struct omap2_hsmmc_info *controllers) | |||
| 281 | return 0; | 285 | return 0; |
| 282 | } | 286 | } |
| 283 | 287 | ||
| 284 | static struct regulator_init_data omap4_panda_vaux1 = { | ||
| 285 | .constraints = { | ||
| 286 | .min_uV = 1000000, | ||
| 287 | .max_uV = 3000000, | ||
| 288 | .apply_uV = true, | ||
| 289 | .valid_modes_mask = REGULATOR_MODE_NORMAL | ||
| 290 | | REGULATOR_MODE_STANDBY, | ||
| 291 | .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | ||
| 292 | | REGULATOR_CHANGE_MODE | ||
| 293 | | REGULATOR_CHANGE_STATUS, | ||
| 294 | }, | ||
| 295 | }; | ||
| 296 | |||
| 297 | static struct regulator_init_data omap4_panda_vaux2 = { | 288 | static struct regulator_init_data omap4_panda_vaux2 = { |
| 298 | .constraints = { | 289 | .constraints = { |
| 299 | .min_uV = 1200000, | 290 | .min_uV = 1200000, |
| @@ -349,19 +340,6 @@ static struct regulator_init_data omap4_panda_vpp = { | |||
| 349 | }, | 340 | }, |
| 350 | }; | 341 | }; |
| 351 | 342 | ||
| 352 | static struct regulator_init_data omap4_panda_vusim = { | ||
| 353 | .constraints = { | ||
| 354 | .min_uV = 1200000, | ||
| 355 | .max_uV = 2900000, | ||
| 356 | .apply_uV = true, | ||
| 357 | .valid_modes_mask = REGULATOR_MODE_NORMAL | ||
| 358 | | REGULATOR_MODE_STANDBY, | ||
| 359 | .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | ||
| 360 | | REGULATOR_CHANGE_MODE | ||
| 361 | | REGULATOR_CHANGE_STATUS, | ||
| 362 | }, | ||
| 363 | }; | ||
| 364 | |||
| 365 | static struct regulator_init_data omap4_panda_vana = { | 343 | static struct regulator_init_data omap4_panda_vana = { |
| 366 | .constraints = { | 344 | .constraints = { |
| 367 | .min_uV = 2100000, | 345 | .min_uV = 2100000, |
| @@ -407,6 +385,12 @@ static struct regulator_init_data omap4_panda_vusb = { | |||
| 407 | }, | 385 | }, |
| 408 | }; | 386 | }; |
| 409 | 387 | ||
| 388 | static struct regulator_init_data omap4_panda_clk32kg = { | ||
| 389 | .constraints = { | ||
| 390 | .valid_ops_mask = REGULATOR_CHANGE_STATUS, | ||
| 391 | }, | ||
| 392 | }; | ||
| 393 | |||
| 410 | static struct twl4030_platform_data omap4_panda_twldata = { | 394 | static struct twl4030_platform_data omap4_panda_twldata = { |
| 411 | .irq_base = TWL6030_IRQ_BASE, | 395 | .irq_base = TWL6030_IRQ_BASE, |
| 412 | .irq_end = TWL6030_IRQ_END, | 396 | .irq_end = TWL6030_IRQ_END, |
| @@ -414,14 +398,13 @@ static struct twl4030_platform_data omap4_panda_twldata = { | |||
| 414 | /* Regulators */ | 398 | /* Regulators */ |
| 415 | .vmmc = &omap4_panda_vmmc, | 399 | .vmmc = &omap4_panda_vmmc, |
| 416 | .vpp = &omap4_panda_vpp, | 400 | .vpp = &omap4_panda_vpp, |
| 417 | .vusim = &omap4_panda_vusim, | ||
| 418 | .vana = &omap4_panda_vana, | 401 | .vana = &omap4_panda_vana, |
| 419 | .vcxio = &omap4_panda_vcxio, | 402 | .vcxio = &omap4_panda_vcxio, |
| 420 | .vdac = &omap4_panda_vdac, | 403 | .vdac = &omap4_panda_vdac, |
| 421 | .vusb = &omap4_panda_vusb, | 404 | .vusb = &omap4_panda_vusb, |
| 422 | .vaux1 = &omap4_panda_vaux1, | ||
| 423 | .vaux2 = &omap4_panda_vaux2, | 405 | .vaux2 = &omap4_panda_vaux2, |
| 424 | .vaux3 = &omap4_panda_vaux3, | 406 | .vaux3 = &omap4_panda_vaux3, |
| 407 | .clk32kg = &omap4_panda_clk32kg, | ||
| 425 | .usb = &omap4_usbphy_data, | 408 | .usb = &omap4_usbphy_data, |
| 426 | }; | 409 | }; |
| 427 | 410 | ||
| @@ -433,6 +416,17 @@ static struct i2c_board_info __initdata omap4_panda_i2c_boardinfo[] = { | |||
| 433 | .platform_data = &omap4_panda_twldata, | 416 | .platform_data = &omap4_panda_twldata, |
| 434 | }, | 417 | }, |
| 435 | }; | 418 | }; |
| 419 | |||
| 420 | /* | ||
| 421 | * Display monitor features are burnt in their EEPROM as EDID data. The EEPROM | ||
| 422 | * is connected as I2C slave device, and can be accessed at address 0x50 | ||
| 423 | */ | ||
| 424 | static struct i2c_board_info __initdata panda_i2c_eeprom[] = { | ||
| 425 | { | ||
| 426 | I2C_BOARD_INFO("eeprom", 0x50), | ||
| 427 | }, | ||
| 428 | }; | ||
| 429 | |||
| 436 | static int __init omap4_panda_i2c_init(void) | 430 | static int __init omap4_panda_i2c_init(void) |
| 437 | { | 431 | { |
| 438 | /* | 432 | /* |
| @@ -442,7 +436,12 @@ static int __init omap4_panda_i2c_init(void) | |||
| 442 | omap_register_i2c_bus(1, 400, omap4_panda_i2c_boardinfo, | 436 | omap_register_i2c_bus(1, 400, omap4_panda_i2c_boardinfo, |
| 443 | ARRAY_SIZE(omap4_panda_i2c_boardinfo)); | 437 | ARRAY_SIZE(omap4_panda_i2c_boardinfo)); |
| 444 | omap_register_i2c_bus(2, 400, NULL, 0); | 438 | omap_register_i2c_bus(2, 400, NULL, 0); |
| 445 | omap_register_i2c_bus(3, 400, NULL, 0); | 439 | /* |
| 440 | * Bus 3 is attached to the DVI port where devices like the pico DLP | ||
| 441 | * projector don't work reliably with 400kHz | ||
| 442 | */ | ||
| 443 | omap_register_i2c_bus(3, 100, panda_i2c_eeprom, | ||
| 444 | ARRAY_SIZE(panda_i2c_eeprom)); | ||
| 446 | omap_register_i2c_bus(4, 400, NULL, 0); | 445 | omap_register_i2c_bus(4, 400, NULL, 0); |
| 447 | return 0; | 446 | return 0; |
| 448 | } | 447 | } |
| @@ -462,6 +461,64 @@ static struct omap_board_mux board_mux[] __initdata = { | |||
| 462 | OMAP4_MUX(SDMMC5_DAT1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP), | 461 | OMAP4_MUX(SDMMC5_DAT1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP), |
| 463 | OMAP4_MUX(SDMMC5_DAT2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP), | 462 | OMAP4_MUX(SDMMC5_DAT2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP), |
| 464 | OMAP4_MUX(SDMMC5_DAT3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP), | 463 | OMAP4_MUX(SDMMC5_DAT3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP), |
| 464 | /* gpio 0 - TFP410 PD */ | ||
| 465 | OMAP4_MUX(KPD_COL1, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3), | ||
| 466 | /* dispc2_data23 */ | ||
| 467 | OMAP4_MUX(USBB2_ULPITLL_STP, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 468 | /* dispc2_data22 */ | ||
| 469 | OMAP4_MUX(USBB2_ULPITLL_DIR, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 470 | /* dispc2_data21 */ | ||
| 471 | OMAP4_MUX(USBB2_ULPITLL_NXT, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 472 | /* dispc2_data20 */ | ||
| 473 | OMAP4_MUX(USBB2_ULPITLL_DAT0, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 474 | /* dispc2_data19 */ | ||
| 475 | OMAP4_MUX(USBB2_ULPITLL_DAT1, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 476 | /* dispc2_data18 */ | ||
| 477 | OMAP4_MUX(USBB2_ULPITLL_DAT2, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 478 | /* dispc2_data15 */ | ||
| 479 | OMAP4_MUX(USBB2_ULPITLL_DAT3, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 480 | /* dispc2_data14 */ | ||
| 481 | OMAP4_MUX(USBB2_ULPITLL_DAT4, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 482 | /* dispc2_data13 */ | ||
| 483 | OMAP4_MUX(USBB2_ULPITLL_DAT5, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 484 | /* dispc2_data12 */ | ||
| 485 | OMAP4_MUX(USBB2_ULPITLL_DAT6, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 486 | /* dispc2_data11 */ | ||
| 487 | OMAP4_MUX(USBB2_ULPITLL_DAT7, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 488 | /* dispc2_data10 */ | ||
| 489 | OMAP4_MUX(DPM_EMU3, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 490 | /* dispc2_data9 */ | ||
| 491 | OMAP4_MUX(DPM_EMU4, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 492 | /* dispc2_data16 */ | ||
| 493 | OMAP4_MUX(DPM_EMU5, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 494 | /* dispc2_data17 */ | ||
| 495 | OMAP4_MUX(DPM_EMU6, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 496 | /* dispc2_hsync */ | ||
| 497 | OMAP4_MUX(DPM_EMU7, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 498 | /* dispc2_pclk */ | ||
| 499 | OMAP4_MUX(DPM_EMU8, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 500 | /* dispc2_vsync */ | ||
| 501 | OMAP4_MUX(DPM_EMU9, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 502 | /* dispc2_de */ | ||
| 503 | OMAP4_MUX(DPM_EMU10, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 504 | /* dispc2_data8 */ | ||
| 505 | OMAP4_MUX(DPM_EMU11, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 506 | /* dispc2_data7 */ | ||
| 507 | OMAP4_MUX(DPM_EMU12, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 508 | /* dispc2_data6 */ | ||
| 509 | OMAP4_MUX(DPM_EMU13, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 510 | /* dispc2_data5 */ | ||
| 511 | OMAP4_MUX(DPM_EMU14, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 512 | /* dispc2_data4 */ | ||
| 513 | OMAP4_MUX(DPM_EMU15, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 514 | /* dispc2_data3 */ | ||
| 515 | OMAP4_MUX(DPM_EMU16, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 516 | /* dispc2_data2 */ | ||
| 517 | OMAP4_MUX(DPM_EMU17, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 518 | /* dispc2_data1 */ | ||
| 519 | OMAP4_MUX(DPM_EMU18, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 520 | /* dispc2_data0 */ | ||
| 521 | OMAP4_MUX(DPM_EMU19, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5), | ||
| 465 | { .reg_offset = OMAP_MUX_TERMINATOR }, | 522 | { .reg_offset = OMAP_MUX_TERMINATOR }, |
| 466 | }; | 523 | }; |
| 467 | 524 | ||
| @@ -535,6 +592,128 @@ static inline void board_serial_init(void) | |||
| 535 | } | 592 | } |
| 536 | #endif | 593 | #endif |
| 537 | 594 | ||
| 595 | /* Display DVI */ | ||
| 596 | #define PANDA_DVI_TFP410_POWER_DOWN_GPIO 0 | ||
| 597 | |||
| 598 | static int omap4_panda_enable_dvi(struct omap_dss_device *dssdev) | ||
| 599 | { | ||
| 600 | gpio_set_value(dssdev->reset_gpio, 1); | ||
| 601 | return 0; | ||
| 602 | } | ||
| 603 | |||
| 604 | static void omap4_panda_disable_dvi(struct omap_dss_device *dssdev) | ||
| 605 | { | ||
| 606 | gpio_set_value(dssdev->reset_gpio, 0); | ||
| 607 | } | ||
| 608 | |||
| 609 | /* Using generic display panel */ | ||
| 610 | static struct panel_generic_dpi_data omap4_dvi_panel = { | ||
| 611 | .name = "generic", | ||
| 612 | .platform_enable = omap4_panda_enable_dvi, | ||
| 613 | .platform_disable = omap4_panda_disable_dvi, | ||
| 614 | }; | ||
| 615 | |||
| 616 | struct omap_dss_device omap4_panda_dvi_device = { | ||
| 617 | .type = OMAP_DISPLAY_TYPE_DPI, | ||
| 618 | .name = "dvi", | ||
| 619 | .driver_name = "generic_dpi_panel", | ||
| 620 | .data = &omap4_dvi_panel, | ||
| 621 | .phy.dpi.data_lines = 24, | ||
| 622 | .reset_gpio = PANDA_DVI_TFP410_POWER_DOWN_GPIO, | ||
| 623 | .channel = OMAP_DSS_CHANNEL_LCD2, | ||
| 624 | }; | ||
| 625 | |||
| 626 | int __init omap4_panda_dvi_init(void) | ||
| 627 | { | ||
| 628 | int r; | ||
| 629 | |||
| 630 | /* Requesting TFP410 DVI GPIO and disabling it, at bootup */ | ||
| 631 | r = gpio_request_one(omap4_panda_dvi_device.reset_gpio, | ||
| 632 | GPIOF_OUT_INIT_LOW, "DVI PD"); | ||
| 633 | if (r) | ||
| 634 | pr_err("Failed to get DVI powerdown GPIO\n"); | ||
| 635 | |||
| 636 | return r; | ||
| 637 | } | ||
| 638 | |||
| 639 | |||
| 640 | static void omap4_panda_hdmi_mux_init(void) | ||
| 641 | { | ||
| 642 | /* PAD0_HDMI_HPD_PAD1_HDMI_CEC */ | ||
| 643 | omap_mux_init_signal("hdmi_hpd", | ||
| 644 | OMAP_PIN_INPUT_PULLUP); | ||
| 645 | omap_mux_init_signal("hdmi_cec", | ||
| 646 | OMAP_PIN_INPUT_PULLUP); | ||
| 647 | /* PAD0_HDMI_DDC_SCL_PAD1_HDMI_DDC_SDA */ | ||
| 648 | omap_mux_init_signal("hdmi_ddc_scl", | ||
| 649 | OMAP_PIN_INPUT_PULLUP); | ||
| 650 | omap_mux_init_signal("hdmi_ddc_sda", | ||
| 651 | OMAP_PIN_INPUT_PULLUP); | ||
| 652 | } | ||
| 653 | |||
| 654 | static int omap4_panda_panel_enable_hdmi(struct omap_dss_device *dssdev) | ||
| 655 | { | ||
| 656 | int status; | ||
| 657 | |||
| 658 | status = gpio_request_one(HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH, | ||
| 659 | "hdmi_gpio_hpd"); | ||
| 660 | if (status) { | ||
| 661 | pr_err("Cannot request GPIO %d\n", HDMI_GPIO_HPD); | ||
| 662 | return status; | ||
| 663 | } | ||
| 664 | status = gpio_request_one(HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH, | ||
| 665 | "hdmi_gpio_ls_oe"); | ||
| 666 | if (status) { | ||
| 667 | pr_err("Cannot request GPIO %d\n", HDMI_GPIO_LS_OE); | ||
| 668 | goto error1; | ||
| 669 | } | ||
| 670 | |||
| 671 | return 0; | ||
| 672 | |||
| 673 | error1: | ||
| 674 | gpio_free(HDMI_GPIO_HPD); | ||
| 675 | |||
| 676 | return status; | ||
| 677 | } | ||
| 678 | |||
| 679 | static void omap4_panda_panel_disable_hdmi(struct omap_dss_device *dssdev) | ||
| 680 | { | ||
| 681 | gpio_free(HDMI_GPIO_LS_OE); | ||
| 682 | gpio_free(HDMI_GPIO_HPD); | ||
| 683 | } | ||
| 684 | |||
| 685 | static struct omap_dss_device omap4_panda_hdmi_device = { | ||
| 686 | .name = "hdmi", | ||
| 687 | .driver_name = "hdmi_panel", | ||
| 688 | .type = OMAP_DISPLAY_TYPE_HDMI, | ||
| 689 | .platform_enable = omap4_panda_panel_enable_hdmi, | ||
| 690 | .platform_disable = omap4_panda_panel_disable_hdmi, | ||
| 691 | .channel = OMAP_DSS_CHANNEL_DIGIT, | ||
| 692 | }; | ||
| 693 | |||
| 694 | static struct omap_dss_device *omap4_panda_dss_devices[] = { | ||
| 695 | &omap4_panda_dvi_device, | ||
| 696 | &omap4_panda_hdmi_device, | ||
| 697 | }; | ||
| 698 | |||
| 699 | static struct omap_dss_board_info omap4_panda_dss_data = { | ||
| 700 | .num_devices = ARRAY_SIZE(omap4_panda_dss_devices), | ||
| 701 | .devices = omap4_panda_dss_devices, | ||
| 702 | .default_device = &omap4_panda_dvi_device, | ||
| 703 | }; | ||
| 704 | |||
| 705 | void omap4_panda_display_init(void) | ||
| 706 | { | ||
| 707 | int r; | ||
| 708 | |||
| 709 | r = omap4_panda_dvi_init(); | ||
| 710 | if (r) | ||
| 711 | pr_err("error initializing panda DVI\n"); | ||
| 712 | |||
| 713 | omap4_panda_hdmi_mux_init(); | ||
| 714 | omap_display_init(&omap4_panda_dss_data); | ||
| 715 | } | ||
| 716 | |||
| 538 | static void __init omap4_panda_init(void) | 717 | static void __init omap4_panda_init(void) |
| 539 | { | 718 | { |
| 540 | int package = OMAP_PACKAGE_CBS; | 719 | int package = OMAP_PACKAGE_CBS; |
| @@ -553,6 +732,7 @@ static void __init omap4_panda_init(void) | |||
| 553 | omap4_twl6030_hsmmc_init(mmc); | 732 | omap4_twl6030_hsmmc_init(mmc); |
| 554 | omap4_ehci_init(); | 733 | omap4_ehci_init(); |
| 555 | usb_musb_init(&musb_board_data); | 734 | usb_musb_init(&musb_board_data); |
| 735 | omap4_panda_display_init(); | ||
| 556 | } | 736 | } |
| 557 | 737 | ||
| 558 | static void __init omap4_panda_map_io(void) | 738 | static void __init omap4_panda_map_io(void) |
diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c index d0961945c65a..59ca33326b8c 100644 --- a/arch/arm/mach-omap2/board-overo.c +++ b/arch/arm/mach-omap2/board-overo.c | |||
| @@ -28,6 +28,8 @@ | |||
| 28 | #include <linux/platform_device.h> | 28 | #include <linux/platform_device.h> |
| 29 | #include <linux/i2c/twl.h> | 29 | #include <linux/i2c/twl.h> |
| 30 | #include <linux/regulator/machine.h> | 30 | #include <linux/regulator/machine.h> |
| 31 | #include <linux/regulator/fixed.h> | ||
| 32 | #include <linux/spi/spi.h> | ||
| 31 | 33 | ||
| 32 | #include <linux/mtd/mtd.h> | 34 | #include <linux/mtd/mtd.h> |
| 33 | #include <linux/mtd/nand.h> | 35 | #include <linux/mtd/nand.h> |
| @@ -41,10 +43,14 @@ | |||
| 41 | 43 | ||
| 42 | #include <plat/board.h> | 44 | #include <plat/board.h> |
| 43 | #include <plat/common.h> | 45 | #include <plat/common.h> |
| 46 | #include <plat/display.h> | ||
| 47 | #include <plat/panel-generic-dpi.h> | ||
| 44 | #include <mach/gpio.h> | 48 | #include <mach/gpio.h> |
| 45 | #include <plat/gpmc.h> | 49 | #include <plat/gpmc.h> |
| 46 | #include <mach/hardware.h> | 50 | #include <mach/hardware.h> |
| 47 | #include <plat/nand.h> | 51 | #include <plat/nand.h> |
| 52 | #include <plat/mcspi.h> | ||
| 53 | #include <plat/mux.h> | ||
| 48 | #include <plat/usb.h> | 54 | #include <plat/usb.h> |
| 49 | 55 | ||
| 50 | #include "mux.h" | 56 | #include "mux.h" |
| @@ -68,8 +74,6 @@ | |||
| 68 | #if defined(CONFIG_TOUCHSCREEN_ADS7846) || \ | 74 | #if defined(CONFIG_TOUCHSCREEN_ADS7846) || \ |
| 69 | defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE) | 75 | defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE) |
| 70 | 76 | ||
| 71 | #include <plat/mcspi.h> | ||
| 72 | #include <linux/spi/spi.h> | ||
| 73 | #include <linux/spi/ads7846.h> | 77 | #include <linux/spi/ads7846.h> |
| 74 | 78 | ||
| 75 | static struct omap2_mcspi_device_config ads7846_mcspi_config = { | 79 | static struct omap2_mcspi_device_config ads7846_mcspi_config = { |
| @@ -94,16 +98,32 @@ static struct ads7846_platform_data ads7846_config = { | |||
| 94 | .keep_vref_on = 1, | 98 | .keep_vref_on = 1, |
| 95 | }; | 99 | }; |
| 96 | 100 | ||
| 97 | static struct spi_board_info overo_spi_board_info[] __initdata = { | 101 | /* fixed regulator for ads7846 */ |
| 98 | { | 102 | static struct regulator_consumer_supply ads7846_supply = |
| 99 | .modalias = "ads7846", | 103 | REGULATOR_SUPPLY("vcc", "spi1.0"); |
| 100 | .bus_num = 1, | 104 | |
| 101 | .chip_select = 0, | 105 | static struct regulator_init_data vads7846_regulator = { |
| 102 | .max_speed_hz = 1500000, | 106 | .constraints = { |
| 103 | .controller_data = &ads7846_mcspi_config, | 107 | .valid_ops_mask = REGULATOR_CHANGE_STATUS, |
| 104 | .irq = OMAP_GPIO_IRQ(OVERO_GPIO_PENDOWN), | 108 | }, |
| 105 | .platform_data = &ads7846_config, | 109 | .num_consumer_supplies = 1, |
| 106 | } | 110 | .consumer_supplies = &ads7846_supply, |
| 111 | }; | ||
| 112 | |||
| 113 | static struct fixed_voltage_config vads7846 = { | ||
| 114 | .supply_name = "vads7846", | ||
| 115 | .microvolts = 3300000, /* 3.3V */ | ||
| 116 | .gpio = -EINVAL, | ||
| 117 | .startup_delay = 0, | ||
| 118 | .init_data = &vads7846_regulator, | ||
| 119 | }; | ||
| 120 | |||
| 121 | static struct platform_device vads7846_device = { | ||
| 122 | .name = "reg-fixed-voltage", | ||
| 123 | .id = 1, | ||
| 124 | .dev = { | ||
| 125 | .platform_data = &vads7846, | ||
| 126 | }, | ||
| 107 | }; | 127 | }; |
| 108 | 128 | ||
| 109 | static void __init overo_ads7846_init(void) | 129 | static void __init overo_ads7846_init(void) |
| @@ -116,8 +136,7 @@ static void __init overo_ads7846_init(void) | |||
| 116 | return; | 136 | return; |
| 117 | } | 137 | } |
| 118 | 138 | ||
| 119 | spi_register_board_info(overo_spi_board_info, | 139 | platform_device_register(&vads7846_device); |
| 120 | ARRAY_SIZE(overo_spi_board_info)); | ||
| 121 | } | 140 | } |
| 122 | 141 | ||
| 123 | #else | 142 | #else |
| @@ -233,6 +252,137 @@ static inline void __init overo_init_smsc911x(void) | |||
| 233 | static inline void __init overo_init_smsc911x(void) { return; } | 252 | static inline void __init overo_init_smsc911x(void) { return; } |
| 234 | #endif | 253 | #endif |
| 235 | 254 | ||
| 255 | /* DSS */ | ||
| 256 | static int lcd_enabled; | ||
| 257 | static int dvi_enabled; | ||
| 258 | |||
| 259 | #define OVERO_GPIO_LCD_EN 144 | ||
| 260 | #define OVERO_GPIO_LCD_BL 145 | ||
| 261 | |||
| 262 | static void __init overo_display_init(void) | ||
| 263 | { | ||
| 264 | if ((gpio_request(OVERO_GPIO_LCD_EN, "OVERO_GPIO_LCD_EN") == 0) && | ||
| 265 | (gpio_direction_output(OVERO_GPIO_LCD_EN, 1) == 0)) | ||
| 266 | gpio_export(OVERO_GPIO_LCD_EN, 0); | ||
| 267 | else | ||
| 268 | printk(KERN_ERR "could not obtain gpio for " | ||
| 269 | "OVERO_GPIO_LCD_EN\n"); | ||
| 270 | |||
| 271 | if ((gpio_request(OVERO_GPIO_LCD_BL, "OVERO_GPIO_LCD_BL") == 0) && | ||
| 272 | (gpio_direction_output(OVERO_GPIO_LCD_BL, 1) == 0)) | ||
| 273 | gpio_export(OVERO_GPIO_LCD_BL, 0); | ||
| 274 | else | ||
| 275 | printk(KERN_ERR "could not obtain gpio for " | ||
| 276 | "OVERO_GPIO_LCD_BL\n"); | ||
| 277 | } | ||
| 278 | |||
| 279 | static int overo_panel_enable_dvi(struct omap_dss_device *dssdev) | ||
| 280 | { | ||
| 281 | if (lcd_enabled) { | ||
| 282 | printk(KERN_ERR "cannot enable DVI, LCD is enabled\n"); | ||
| 283 | return -EINVAL; | ||
| 284 | } | ||
| 285 | dvi_enabled = 1; | ||
| 286 | |||
| 287 | return 0; | ||
| 288 | } | ||
| 289 | |||
| 290 | static void overo_panel_disable_dvi(struct omap_dss_device *dssdev) | ||
| 291 | { | ||
| 292 | dvi_enabled = 0; | ||
| 293 | } | ||
| 294 | |||
| 295 | static struct panel_generic_dpi_data dvi_panel = { | ||
| 296 | .name = "generic", | ||
| 297 | .platform_enable = overo_panel_enable_dvi, | ||
| 298 | .platform_disable = overo_panel_disable_dvi, | ||
| 299 | }; | ||
| 300 | |||
| 301 | static struct omap_dss_device overo_dvi_device = { | ||
| 302 | .name = "dvi", | ||
| 303 | .type = OMAP_DISPLAY_TYPE_DPI, | ||
| 304 | .driver_name = "generic_dpi_panel", | ||
| 305 | .data = &dvi_panel, | ||
| 306 | .phy.dpi.data_lines = 24, | ||
| 307 | }; | ||
| 308 | |||
| 309 | static struct omap_dss_device overo_tv_device = { | ||
| 310 | .name = "tv", | ||
| 311 | .driver_name = "venc", | ||
| 312 | .type = OMAP_DISPLAY_TYPE_VENC, | ||
| 313 | .phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO, | ||
| 314 | }; | ||
| 315 | |||
| 316 | static int overo_panel_enable_lcd(struct omap_dss_device *dssdev) | ||
| 317 | { | ||
| 318 | if (dvi_enabled) { | ||
| 319 | printk(KERN_ERR "cannot enable LCD, DVI is enabled\n"); | ||
| 320 | return -EINVAL; | ||
| 321 | } | ||
| 322 | |||
| 323 | gpio_set_value(OVERO_GPIO_LCD_EN, 1); | ||
| 324 | gpio_set_value(OVERO_GPIO_LCD_BL, 1); | ||
| 325 | lcd_enabled = 1; | ||
| 326 | return 0; | ||
| 327 | } | ||
| 328 | |||
| 329 | static void overo_panel_disable_lcd(struct omap_dss_device *dssdev) | ||
| 330 | { | ||
| 331 | gpio_set_value(OVERO_GPIO_LCD_EN, 0); | ||
| 332 | gpio_set_value(OVERO_GPIO_LCD_BL, 0); | ||
| 333 | lcd_enabled = 0; | ||
| 334 | } | ||
| 335 | |||
| 336 | static struct panel_generic_dpi_data lcd43_panel = { | ||
| 337 | .name = "samsung_lte430wq_f0c", | ||
| 338 | .platform_enable = overo_panel_enable_lcd, | ||
| 339 | .platform_disable = overo_panel_disable_lcd, | ||
| 340 | }; | ||
| 341 | |||
| 342 | static struct omap_dss_device overo_lcd43_device = { | ||
| 343 | .name = "lcd43", | ||
| 344 | .type = OMAP_DISPLAY_TYPE_DPI, | ||
| 345 | .driver_name = "generic_dpi_panel", | ||
| 346 | .data = &lcd43_panel, | ||
| 347 | .phy.dpi.data_lines = 24, | ||
| 348 | }; | ||
| 349 | |||
| 350 | #if defined(CONFIG_PANEL_LGPHILIPS_LB035Q02) || \ | ||
| 351 | defined(CONFIG_PANEL_LGPHILIPS_LB035Q02_MODULE) | ||
| 352 | static struct omap_dss_device overo_lcd35_device = { | ||
| 353 | .type = OMAP_DISPLAY_TYPE_DPI, | ||
| 354 | .name = "lcd35", | ||
| 355 | .driver_name = "lgphilips_lb035q02_panel", | ||
| 356 | .phy.dpi.data_lines = 24, | ||
| 357 | .platform_enable = overo_panel_enable_lcd, | ||
| 358 | .platform_disable = overo_panel_disable_lcd, | ||
| 359 | }; | ||
| 360 | #endif | ||
| 361 | |||
| 362 | static struct omap_dss_device *overo_dss_devices[] = { | ||
| 363 | &overo_dvi_device, | ||
| 364 | &overo_tv_device, | ||
| 365 | #if defined(CONFIG_PANEL_LGPHILIPS_LB035Q02) || \ | ||
| 366 | defined(CONFIG_PANEL_LGPHILIPS_LB035Q02_MODULE) | ||
| 367 | &overo_lcd35_device, | ||
| 368 | #endif | ||
| 369 | &overo_lcd43_device, | ||
| 370 | }; | ||
| 371 | |||
| 372 | static struct omap_dss_board_info overo_dss_data = { | ||
| 373 | .num_devices = ARRAY_SIZE(overo_dss_devices), | ||
| 374 | .devices = overo_dss_devices, | ||
| 375 | .default_device = &overo_dvi_device, | ||
| 376 | }; | ||
| 377 | |||
| 378 | static struct regulator_consumer_supply overo_vdda_dac_supply = | ||
| 379 | REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"); | ||
| 380 | |||
| 381 | static struct regulator_consumer_supply overo_vdds_dsi_supply[] = { | ||
| 382 | REGULATOR_SUPPLY("vdds_dsi", "omapdss"), | ||
| 383 | REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"), | ||
| 384 | }; | ||
| 385 | |||
| 236 | static struct mtd_partition overo_nand_partitions[] = { | 386 | static struct mtd_partition overo_nand_partitions[] = { |
| 237 | { | 387 | { |
| 238 | .name = "xloader", | 388 | .name = "xloader", |
| @@ -323,6 +473,93 @@ static struct regulator_consumer_supply overo_vmmc1_supply = { | |||
| 323 | .supply = "vmmc", | 473 | .supply = "vmmc", |
| 324 | }; | 474 | }; |
| 325 | 475 | ||
| 476 | #if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE) | ||
| 477 | #include <linux/leds.h> | ||
| 478 | |||
| 479 | static struct gpio_led gpio_leds[] = { | ||
| 480 | { | ||
| 481 | .name = "overo:red:gpio21", | ||
| 482 | .default_trigger = "heartbeat", | ||
| 483 | .gpio = 21, | ||
| 484 | .active_low = true, | ||
| 485 | }, | ||
| 486 | { | ||
| 487 | .name = "overo:blue:gpio22", | ||
| 488 | .default_trigger = "none", | ||
| 489 | .gpio = 22, | ||
| 490 | .active_low = true, | ||
| 491 | }, | ||
| 492 | { | ||
| 493 | .name = "overo:blue:COM", | ||
| 494 | .default_trigger = "mmc0", | ||
| 495 | .gpio = -EINVAL, /* gets replaced */ | ||
| 496 | .active_low = true, | ||
| 497 | }, | ||
| 498 | }; | ||
| 499 | |||
| 500 | static struct gpio_led_platform_data gpio_leds_pdata = { | ||
| 501 | .leds = gpio_leds, | ||
| 502 | .num_leds = ARRAY_SIZE(gpio_leds), | ||
| 503 | }; | ||
| 504 | |||
| 505 | static struct platform_device gpio_leds_device = { | ||
| 506 | .name = "leds-gpio", | ||
| 507 | .id = -1, | ||
| 508 | .dev = { | ||
| 509 | .platform_data = &gpio_leds_pdata, | ||
| 510 | }, | ||
| 511 | }; | ||
| 512 | |||
| 513 | static void __init overo_init_led(void) | ||
| 514 | { | ||
| 515 | platform_device_register(&gpio_leds_device); | ||
| 516 | } | ||
| 517 | |||
| 518 | #else | ||
| 519 | static inline void __init overo_init_led(void) { return; } | ||
| 520 | #endif | ||
| 521 | |||
| 522 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) | ||
| 523 | #include <linux/input.h> | ||
| 524 | #include <linux/gpio_keys.h> | ||
| 525 | |||
| 526 | static struct gpio_keys_button gpio_buttons[] = { | ||
| 527 | { | ||
| 528 | .code = BTN_0, | ||
| 529 | .gpio = 23, | ||
| 530 | .desc = "button0", | ||
| 531 | .wakeup = 1, | ||
| 532 | }, | ||
| 533 | { | ||
| 534 | .code = BTN_1, | ||
| 535 | .gpio = 14, | ||
| 536 | .desc = "button1", | ||
| 537 | .wakeup = 1, | ||
| 538 | }, | ||
| 539 | }; | ||
| 540 | |||
| 541 | static struct gpio_keys_platform_data gpio_keys_pdata = { | ||
| 542 | .buttons = gpio_buttons, | ||
| 543 | .nbuttons = ARRAY_SIZE(gpio_buttons), | ||
| 544 | }; | ||
| 545 | |||
| 546 | static struct platform_device gpio_keys_device = { | ||
| 547 | .name = "gpio-keys", | ||
| 548 | .id = -1, | ||
| 549 | .dev = { | ||
| 550 | .platform_data = &gpio_keys_pdata, | ||
| 551 | }, | ||
| 552 | }; | ||
| 553 | |||
| 554 | static void __init overo_init_keys(void) | ||
| 555 | { | ||
| 556 | platform_device_register(&gpio_keys_device); | ||
| 557 | } | ||
| 558 | |||
| 559 | #else | ||
| 560 | static inline void __init overo_init_keys(void) { return; } | ||
| 561 | #endif | ||
| 562 | |||
| 326 | static int overo_twl_gpio_setup(struct device *dev, | 563 | static int overo_twl_gpio_setup(struct device *dev, |
| 327 | unsigned gpio, unsigned ngpio) | 564 | unsigned gpio, unsigned ngpio) |
| 328 | { | 565 | { |
| @@ -330,6 +567,11 @@ static int overo_twl_gpio_setup(struct device *dev, | |||
| 330 | 567 | ||
| 331 | overo_vmmc1_supply.dev = mmc[0].dev; | 568 | overo_vmmc1_supply.dev = mmc[0].dev; |
| 332 | 569 | ||
| 570 | #if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE) | ||
| 571 | /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ | ||
| 572 | gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; | ||
| 573 | #endif | ||
| 574 | |||
| 333 | return 0; | 575 | return 0; |
| 334 | } | 576 | } |
| 335 | 577 | ||
| @@ -337,6 +579,7 @@ static struct twl4030_gpio_platform_data overo_gpio_data = { | |||
| 337 | .gpio_base = OMAP_MAX_GPIO_LINES, | 579 | .gpio_base = OMAP_MAX_GPIO_LINES, |
| 338 | .irq_base = TWL4030_GPIO_IRQ_BASE, | 580 | .irq_base = TWL4030_GPIO_IRQ_BASE, |
| 339 | .irq_end = TWL4030_GPIO_IRQ_END, | 581 | .irq_end = TWL4030_GPIO_IRQ_END, |
| 582 | .use_leds = true, | ||
| 340 | .setup = overo_twl_gpio_setup, | 583 | .setup = overo_twl_gpio_setup, |
| 341 | }; | 584 | }; |
| 342 | 585 | ||
| @@ -358,6 +601,35 @@ static struct regulator_init_data overo_vmmc1 = { | |||
| 358 | .consumer_supplies = &overo_vmmc1_supply, | 601 | .consumer_supplies = &overo_vmmc1_supply, |
| 359 | }; | 602 | }; |
| 360 | 603 | ||
| 604 | /* VDAC for DSS driving S-Video (8 mA unloaded, max 65 mA) */ | ||
| 605 | static struct regulator_init_data overo_vdac = { | ||
| 606 | .constraints = { | ||
| 607 | .min_uV = 1800000, | ||
| 608 | .max_uV = 1800000, | ||
| 609 | .valid_modes_mask = REGULATOR_MODE_NORMAL | ||
| 610 | | REGULATOR_MODE_STANDBY, | ||
| 611 | .valid_ops_mask = REGULATOR_CHANGE_MODE | ||
| 612 | | REGULATOR_CHANGE_STATUS, | ||
| 613 | }, | ||
| 614 | .num_consumer_supplies = 1, | ||
| 615 | .consumer_supplies = &overo_vdda_dac_supply, | ||
| 616 | }; | ||
| 617 | |||
| 618 | /* VPLL2 for digital video outputs */ | ||
| 619 | static struct regulator_init_data overo_vpll2 = { | ||
| 620 | .constraints = { | ||
| 621 | .name = "VDVI", | ||
| 622 | .min_uV = 1800000, | ||
| 623 | .max_uV = 1800000, | ||
| 624 | .valid_modes_mask = REGULATOR_MODE_NORMAL | ||
| 625 | | REGULATOR_MODE_STANDBY, | ||
| 626 | .valid_ops_mask = REGULATOR_CHANGE_MODE | ||
| 627 | | REGULATOR_CHANGE_STATUS, | ||
| 628 | }, | ||
| 629 | .num_consumer_supplies = ARRAY_SIZE(overo_vdds_dsi_supply), | ||
| 630 | .consumer_supplies = overo_vdds_dsi_supply, | ||
| 631 | }; | ||
| 632 | |||
| 361 | static struct twl4030_codec_audio_data overo_audio_data; | 633 | static struct twl4030_codec_audio_data overo_audio_data; |
| 362 | 634 | ||
| 363 | static struct twl4030_codec_data overo_codec_data = { | 635 | static struct twl4030_codec_data overo_codec_data = { |
| @@ -365,8 +637,6 @@ static struct twl4030_codec_data overo_codec_data = { | |||
| 365 | .audio = &overo_audio_data, | 637 | .audio = &overo_audio_data, |
| 366 | }; | 638 | }; |
| 367 | 639 | ||
| 368 | /* mmc2 (WLAN) and Bluetooth don't use twl4030 regulators */ | ||
| 369 | |||
| 370 | static struct twl4030_platform_data overo_twldata = { | 640 | static struct twl4030_platform_data overo_twldata = { |
| 371 | .irq_base = TWL4030_IRQ_BASE, | 641 | .irq_base = TWL4030_IRQ_BASE, |
| 372 | .irq_end = TWL4030_IRQ_END, | 642 | .irq_end = TWL4030_IRQ_END, |
| @@ -374,6 +644,8 @@ static struct twl4030_platform_data overo_twldata = { | |||
| 374 | .usb = &overo_usb_data, | 644 | .usb = &overo_usb_data, |
| 375 | .codec = &overo_codec_data, | 645 | .codec = &overo_codec_data, |
| 376 | .vmmc1 = &overo_vmmc1, | 646 | .vmmc1 = &overo_vmmc1, |
| 647 | .vdac = &overo_vdac, | ||
| 648 | .vpll2 = &overo_vpll2, | ||
| 377 | }; | 649 | }; |
| 378 | 650 | ||
| 379 | static struct i2c_board_info __initdata overo_i2c_boardinfo[] = { | 651 | static struct i2c_board_info __initdata overo_i2c_boardinfo[] = { |
| @@ -394,18 +666,38 @@ static int __init overo_i2c_init(void) | |||
| 394 | return 0; | 666 | return 0; |
| 395 | } | 667 | } |
| 396 | 668 | ||
| 397 | static struct platform_device overo_lcd_device = { | 669 | static struct spi_board_info overo_spi_board_info[] __initdata = { |
| 398 | .name = "overo_lcd", | 670 | #if defined(CONFIG_TOUCHSCREEN_ADS7846) || \ |
| 399 | .id = -1, | 671 | defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE) |
| 400 | }; | 672 | { |
| 401 | 673 | .modalias = "ads7846", | |
| 402 | static struct omap_lcd_config overo_lcd_config __initdata = { | 674 | .bus_num = 1, |
| 403 | .ctrl_name = "internal", | 675 | .chip_select = 0, |
| 676 | .max_speed_hz = 1500000, | ||
| 677 | .controller_data = &ads7846_mcspi_config, | ||
| 678 | .irq = OMAP_GPIO_IRQ(OVERO_GPIO_PENDOWN), | ||
| 679 | .platform_data = &ads7846_config, | ||
| 680 | }, | ||
| 681 | #endif | ||
| 682 | #if defined(CONFIG_PANEL_LGPHILIPS_LB035Q02) || \ | ||
| 683 | defined(CONFIG_PANEL_LGPHILIPS_LB035Q02_MODULE) | ||
| 684 | { | ||
| 685 | .modalias = "lgphilips_lb035q02_panel-spi", | ||
| 686 | .bus_num = 1, | ||
| 687 | .chip_select = 1, | ||
| 688 | .max_speed_hz = 500000, | ||
| 689 | .mode = SPI_MODE_3, | ||
| 690 | }, | ||
| 691 | #endif | ||
| 404 | }; | 692 | }; |
| 405 | 693 | ||
| 406 | static struct omap_board_config_kernel overo_config[] __initdata = { | 694 | static int __init overo_spi_init(void) |
| 407 | { OMAP_TAG_LCD, &overo_lcd_config }, | 695 | { |
| 408 | }; | 696 | overo_ads7846_init(); |
| 697 | spi_register_board_info(overo_spi_board_info, | ||
| 698 | ARRAY_SIZE(overo_spi_board_info)); | ||
| 699 | return 0; | ||
| 700 | } | ||
| 409 | 701 | ||
| 410 | static void __init overo_init_early(void) | 702 | static void __init overo_init_early(void) |
| 411 | { | 703 | { |
| @@ -414,15 +706,10 @@ static void __init overo_init_early(void) | |||
| 414 | mt46h32m32lf6_sdrc_params); | 706 | mt46h32m32lf6_sdrc_params); |
| 415 | } | 707 | } |
| 416 | 708 | ||
| 417 | static struct platform_device *overo_devices[] __initdata = { | ||
| 418 | &overo_lcd_device, | ||
| 419 | }; | ||
| 420 | |||
| 421 | static const struct usbhs_omap_board_data usbhs_bdata __initconst = { | 709 | static const struct usbhs_omap_board_data usbhs_bdata __initconst = { |
| 422 | .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED, | 710 | .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED, |
| 423 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, | 711 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, |
| 424 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, | 712 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, |
| 425 | |||
| 426 | .phy_reset = true, | 713 | .phy_reset = true, |
| 427 | .reset_gpio_port[0] = -EINVAL, | 714 | .reset_gpio_port[0] = -EINVAL, |
| 428 | .reset_gpio_port[1] = OVERO_GPIO_USBH_NRESET, | 715 | .reset_gpio_port[1] = OVERO_GPIO_USBH_NRESET, |
| @@ -444,16 +731,18 @@ static struct omap_musb_board_data musb_board_data = { | |||
| 444 | static void __init overo_init(void) | 731 | static void __init overo_init(void) |
| 445 | { | 732 | { |
| 446 | omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); | 733 | omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); |
| 447 | omap_board_config = overo_config; | ||
| 448 | omap_board_config_size = ARRAY_SIZE(overo_config); | ||
| 449 | overo_i2c_init(); | 734 | overo_i2c_init(); |
| 450 | platform_add_devices(overo_devices, ARRAY_SIZE(overo_devices)); | 735 | omap_display_init(&overo_dss_data); |
| 451 | omap_serial_init(); | 736 | omap_serial_init(); |
| 452 | overo_flash_init(); | 737 | overo_flash_init(); |
| 453 | usb_musb_init(&musb_board_data); | 738 | usb_musb_init(&musb_board_data); |
| 454 | usbhs_init(&usbhs_bdata); | 739 | usbhs_init(&usbhs_bdata); |
| 740 | overo_spi_init(); | ||
| 455 | overo_ads7846_init(); | 741 | overo_ads7846_init(); |
| 456 | overo_init_smsc911x(); | 742 | overo_init_smsc911x(); |
| 743 | overo_display_init(); | ||
| 744 | overo_init_led(); | ||
| 745 | overo_init_keys(); | ||
| 457 | 746 | ||
| 458 | /* Ensure SDRC pins are mux'd for self-refresh */ | 747 | /* Ensure SDRC pins are mux'd for self-refresh */ |
| 459 | omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); | 748 | omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); |
diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c index 5f1900c532ec..bbcb6775a6a3 100644 --- a/arch/arm/mach-omap2/board-rx51-peripherals.c +++ b/arch/arm/mach-omap2/board-rx51-peripherals.c | |||
| @@ -372,7 +372,7 @@ static struct regulator_consumer_supply rx51_vaux1_consumers[] = { | |||
| 372 | }; | 372 | }; |
| 373 | 373 | ||
| 374 | static struct regulator_consumer_supply rx51_vdac_supply[] = { | 374 | static struct regulator_consumer_supply rx51_vdac_supply[] = { |
| 375 | REGULATOR_SUPPLY("vdda_dac", "omapdss"), | 375 | REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"), |
| 376 | }; | 376 | }; |
| 377 | 377 | ||
| 378 | static struct regulator_init_data rx51_vaux1 = { | 378 | static struct regulator_init_data rx51_vaux1 = { |
diff --git a/arch/arm/mach-omap2/board-zoom-peripherals.c b/arch/arm/mach-omap2/board-zoom-peripherals.c index 448ab60195d5..8dee7549fbdf 100644 --- a/arch/arm/mach-omap2/board-zoom-peripherals.c +++ b/arch/arm/mach-omap2/board-zoom-peripherals.c | |||
| @@ -226,11 +226,13 @@ static struct omap2_hsmmc_info mmc[] = { | |||
| 226 | {} /* Terminator */ | 226 | {} /* Terminator */ |
| 227 | }; | 227 | }; |
| 228 | 228 | ||
| 229 | static struct regulator_consumer_supply zoom_vpll2_supply = | 229 | static struct regulator_consumer_supply zoom_vpll2_supplies[] = { |
| 230 | REGULATOR_SUPPLY("vdds_dsi", "omapdss"); | 230 | REGULATOR_SUPPLY("vdds_dsi", "omapdss"), |
| 231 | REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"), | ||
| 232 | }; | ||
| 231 | 233 | ||
| 232 | static struct regulator_consumer_supply zoom_vdda_dac_supply = | 234 | static struct regulator_consumer_supply zoom_vdda_dac_supply = |
| 233 | REGULATOR_SUPPLY("vdda_dac", "omapdss"); | 235 | REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"); |
| 234 | 236 | ||
| 235 | static struct regulator_init_data zoom_vpll2 = { | 237 | static struct regulator_init_data zoom_vpll2 = { |
| 236 | .constraints = { | 238 | .constraints = { |
| @@ -241,8 +243,8 @@ static struct regulator_init_data zoom_vpll2 = { | |||
| 241 | .valid_ops_mask = REGULATOR_CHANGE_MODE | 243 | .valid_ops_mask = REGULATOR_CHANGE_MODE |
| 242 | | REGULATOR_CHANGE_STATUS, | 244 | | REGULATOR_CHANGE_STATUS, |
| 243 | }, | 245 | }, |
| 244 | .num_consumer_supplies = 1, | 246 | .num_consumer_supplies = ARRAY_SIZE(zoom_vpll2_supplies), |
| 245 | .consumer_supplies = &zoom_vpll2_supply, | 247 | .consumer_supplies = zoom_vpll2_supplies, |
| 246 | }; | 248 | }; |
| 247 | 249 | ||
| 248 | static struct regulator_init_data zoom_vdac = { | 250 | static struct regulator_init_data zoom_vdac = { |
diff --git a/arch/arm/mach-omap2/clock2420_data.c b/arch/arm/mach-omap2/clock2420_data.c index b6f65d4ac97d..2926d028b6e9 100644 --- a/arch/arm/mach-omap2/clock2420_data.c +++ b/arch/arm/mach-omap2/clock2420_data.c | |||
| @@ -1804,10 +1804,10 @@ static struct omap_clk omap2420_clks[] = { | |||
| 1804 | CLK(NULL, "gfx_2d_fck", &gfx_2d_fck, CK_242X), | 1804 | CLK(NULL, "gfx_2d_fck", &gfx_2d_fck, CK_242X), |
| 1805 | CLK(NULL, "gfx_ick", &gfx_ick, CK_242X), | 1805 | CLK(NULL, "gfx_ick", &gfx_ick, CK_242X), |
| 1806 | /* DSS domain clocks */ | 1806 | /* DSS domain clocks */ |
| 1807 | CLK("omapdss", "ick", &dss_ick, CK_242X), | 1807 | CLK("omapdss_dss", "ick", &dss_ick, CK_242X), |
| 1808 | CLK("omapdss", "dss1_fck", &dss1_fck, CK_242X), | 1808 | CLK("omapdss_dss", "fck", &dss1_fck, CK_242X), |
| 1809 | CLK("omapdss", "dss2_fck", &dss2_fck, CK_242X), | 1809 | CLK("omapdss_dss", "sys_clk", &dss2_fck, CK_242X), |
| 1810 | CLK("omapdss", "tv_fck", &dss_54m_fck, CK_242X), | 1810 | CLK("omapdss_dss", "tv_clk", &dss_54m_fck, CK_242X), |
| 1811 | /* L3 domain clocks */ | 1811 | /* L3 domain clocks */ |
| 1812 | CLK(NULL, "core_l3_ck", &core_l3_ck, CK_242X), | 1812 | CLK(NULL, "core_l3_ck", &core_l3_ck, CK_242X), |
| 1813 | CLK(NULL, "ssi_fck", &ssi_ssr_sst_fck, CK_242X), | 1813 | CLK(NULL, "ssi_fck", &ssi_ssr_sst_fck, CK_242X), |
diff --git a/arch/arm/mach-omap2/clock2430_data.c b/arch/arm/mach-omap2/clock2430_data.c index bba018331a71..0c79d39e3021 100644 --- a/arch/arm/mach-omap2/clock2430_data.c +++ b/arch/arm/mach-omap2/clock2430_data.c | |||
| @@ -1894,10 +1894,10 @@ static struct omap_clk omap2430_clks[] = { | |||
| 1894 | CLK(NULL, "mdm_ick", &mdm_ick, CK_243X), | 1894 | CLK(NULL, "mdm_ick", &mdm_ick, CK_243X), |
| 1895 | CLK(NULL, "mdm_osc_ck", &mdm_osc_ck, CK_243X), | 1895 | CLK(NULL, "mdm_osc_ck", &mdm_osc_ck, CK_243X), |
| 1896 | /* DSS domain clocks */ | 1896 | /* DSS domain clocks */ |
| 1897 | CLK("omapdss", "ick", &dss_ick, CK_243X), | 1897 | CLK("omapdss_dss", "ick", &dss_ick, CK_243X), |
| 1898 | CLK("omapdss", "dss1_fck", &dss1_fck, CK_243X), | 1898 | CLK("omapdss_dss", "fck", &dss1_fck, CK_243X), |
| 1899 | CLK("omapdss", "dss2_fck", &dss2_fck, CK_243X), | 1899 | CLK("omapdss_dss", "sys_clk", &dss2_fck, CK_243X), |
| 1900 | CLK("omapdss", "tv_fck", &dss_54m_fck, CK_243X), | 1900 | CLK("omapdss_dss", "tv_clk", &dss_54m_fck, CK_243X), |
| 1901 | /* L3 domain clocks */ | 1901 | /* L3 domain clocks */ |
| 1902 | CLK(NULL, "core_l3_ck", &core_l3_ck, CK_243X), | 1902 | CLK(NULL, "core_l3_ck", &core_l3_ck, CK_243X), |
| 1903 | CLK(NULL, "ssi_fck", &ssi_ssr_sst_fck, CK_243X), | 1903 | CLK(NULL, "ssi_fck", &ssi_ssr_sst_fck, CK_243X), |
diff --git a/arch/arm/mach-omap2/clock3xxx_data.c b/arch/arm/mach-omap2/clock3xxx_data.c index fcb321a64f13..75b119bd9cda 100644 --- a/arch/arm/mach-omap2/clock3xxx_data.c +++ b/arch/arm/mach-omap2/clock3xxx_data.c | |||
| @@ -3356,13 +3356,13 @@ static struct omap_clk omap3xxx_clks[] = { | |||
| 3356 | CLK("omap_rng", "ick", &rng_ick, CK_34XX | CK_36XX), | 3356 | CLK("omap_rng", "ick", &rng_ick, CK_34XX | CK_36XX), |
| 3357 | CLK(NULL, "sha11_ick", &sha11_ick, CK_34XX | CK_36XX), | 3357 | CLK(NULL, "sha11_ick", &sha11_ick, CK_34XX | CK_36XX), |
| 3358 | CLK(NULL, "des1_ick", &des1_ick, CK_34XX | CK_36XX), | 3358 | CLK(NULL, "des1_ick", &des1_ick, CK_34XX | CK_36XX), |
| 3359 | CLK("omapdss", "dss1_fck", &dss1_alwon_fck_3430es1, CK_3430ES1), | 3359 | CLK("omapdss_dss", "fck", &dss1_alwon_fck_3430es1, CK_3430ES1), |
| 3360 | CLK("omapdss", "dss1_fck", &dss1_alwon_fck_3430es2, CK_3430ES2PLUS | CK_AM35XX | CK_36XX), | 3360 | CLK("omapdss_dss", "fck", &dss1_alwon_fck_3430es2, CK_3430ES2PLUS | CK_AM35XX | CK_36XX), |
| 3361 | CLK("omapdss", "tv_fck", &dss_tv_fck, CK_3XXX), | 3361 | CLK("omapdss_dss", "tv_clk", &dss_tv_fck, CK_3XXX), |
| 3362 | CLK("omapdss", "video_fck", &dss_96m_fck, CK_3XXX), | 3362 | CLK("omapdss_dss", "video_clk", &dss_96m_fck, CK_3XXX), |
| 3363 | CLK("omapdss", "dss2_fck", &dss2_alwon_fck, CK_3XXX), | 3363 | CLK("omapdss_dss", "sys_clk", &dss2_alwon_fck, CK_3XXX), |
| 3364 | CLK("omapdss", "ick", &dss_ick_3430es1, CK_3430ES1), | 3364 | CLK("omapdss_dss", "ick", &dss_ick_3430es1, CK_3430ES1), |
| 3365 | CLK("omapdss", "ick", &dss_ick_3430es2, CK_3430ES2PLUS | CK_AM35XX | CK_36XX), | 3365 | CLK("omapdss_dss", "ick", &dss_ick_3430es2, CK_3430ES2PLUS | CK_AM35XX | CK_36XX), |
| 3366 | CLK(NULL, "cam_mclk", &cam_mclk, CK_34XX | CK_36XX), | 3366 | CLK(NULL, "cam_mclk", &cam_mclk, CK_34XX | CK_36XX), |
| 3367 | CLK(NULL, "cam_ick", &cam_ick, CK_34XX | CK_36XX), | 3367 | CLK(NULL, "cam_ick", &cam_ick, CK_34XX | CK_36XX), |
| 3368 | CLK(NULL, "csi2_96m_fck", &csi2_96m_fck, CK_34XX | CK_36XX), | 3368 | CLK(NULL, "csi2_96m_fck", &csi2_96m_fck, CK_34XX | CK_36XX), |
diff --git a/arch/arm/mach-omap2/clock44xx_data.c b/arch/arm/mach-omap2/clock44xx_data.c index d32ed979a8da..276992d3b7fb 100644 --- a/arch/arm/mach-omap2/clock44xx_data.c +++ b/arch/arm/mach-omap2/clock44xx_data.c | |||
| @@ -3114,11 +3114,16 @@ static struct omap_clk omap44xx_clks[] = { | |||
| 3114 | CLK(NULL, "dmic_sync_mux_ck", &dmic_sync_mux_ck, CK_443X), | 3114 | CLK(NULL, "dmic_sync_mux_ck", &dmic_sync_mux_ck, CK_443X), |
| 3115 | CLK(NULL, "dmic_fck", &dmic_fck, CK_443X), | 3115 | CLK(NULL, "dmic_fck", &dmic_fck, CK_443X), |
| 3116 | CLK(NULL, "dsp_fck", &dsp_fck, CK_443X), | 3116 | CLK(NULL, "dsp_fck", &dsp_fck, CK_443X), |
| 3117 | CLK(NULL, "dss_sys_clk", &dss_sys_clk, CK_443X), | 3117 | CLK("omapdss_dss", "sys_clk", &dss_sys_clk, CK_443X), |
| 3118 | CLK(NULL, "dss_tv_clk", &dss_tv_clk, CK_443X), | 3118 | CLK("omapdss_dss", "tv_clk", &dss_tv_clk, CK_443X), |
| 3119 | CLK(NULL, "dss_dss_clk", &dss_dss_clk, CK_443X), | 3119 | CLK("omapdss_dss", "dss_clk", &dss_dss_clk, CK_443X), |
| 3120 | CLK(NULL, "dss_48mhz_clk", &dss_48mhz_clk, CK_443X), | 3120 | CLK("omapdss_dss", "video_clk", &dss_48mhz_clk, CK_443X), |
| 3121 | CLK(NULL, "dss_fck", &dss_fck, CK_443X), | 3121 | CLK("omapdss_dss", "fck", &dss_fck, CK_443X), |
| 3122 | /* | ||
| 3123 | * On OMAP4, DSS ick is a dummy clock; this is needed for compatibility | ||
| 3124 | * with OMAP2/3. | ||
| 3125 | */ | ||
| 3126 | CLK("omapdss_dss", "ick", &dummy_ck, CK_443X), | ||
| 3122 | CLK(NULL, "efuse_ctrl_cust_fck", &efuse_ctrl_cust_fck, CK_443X), | 3127 | CLK(NULL, "efuse_ctrl_cust_fck", &efuse_ctrl_cust_fck, CK_443X), |
| 3123 | CLK(NULL, "emif1_fck", &emif1_fck, CK_443X), | 3128 | CLK(NULL, "emif1_fck", &emif1_fck, CK_443X), |
| 3124 | CLK(NULL, "emif2_fck", &emif2_fck, CK_443X), | 3129 | CLK(NULL, "emif2_fck", &emif2_fck, CK_443X), |
diff --git a/arch/arm/mach-omap2/clockdomain.c b/arch/arm/mach-omap2/clockdomain.c index ab878545bd9b..6cb6c03293df 100644 --- a/arch/arm/mach-omap2/clockdomain.c +++ b/arch/arm/mach-omap2/clockdomain.c | |||
| @@ -258,7 +258,7 @@ static void _resolve_clkdm_deps(struct clockdomain *clkdm, | |||
| 258 | * clkdm_init - set up the clockdomain layer | 258 | * clkdm_init - set up the clockdomain layer |
| 259 | * @clkdms: optional pointer to an array of clockdomains to register | 259 | * @clkdms: optional pointer to an array of clockdomains to register |
| 260 | * @init_autodeps: optional pointer to an array of autodeps to register | 260 | * @init_autodeps: optional pointer to an array of autodeps to register |
| 261 | * @custom_funcs: func pointers for arch specfic implementations | 261 | * @custom_funcs: func pointers for arch specific implementations |
| 262 | * | 262 | * |
| 263 | * Set up internal state. If a pointer to an array of clockdomains | 263 | * Set up internal state. If a pointer to an array of clockdomains |
| 264 | * @clkdms was supplied, loop through the list of clockdomains, | 264 | * @clkdms was supplied, loop through the list of clockdomains, |
diff --git a/arch/arm/mach-omap2/clockdomain.h b/arch/arm/mach-omap2/clockdomain.h index 85b3dce65640..5823584d9cd7 100644 --- a/arch/arm/mach-omap2/clockdomain.h +++ b/arch/arm/mach-omap2/clockdomain.h | |||
| @@ -125,7 +125,7 @@ struct clockdomain { | |||
| 125 | }; | 125 | }; |
| 126 | 126 | ||
| 127 | /** | 127 | /** |
| 128 | * struct clkdm_ops - Arch specfic function implementations | 128 | * struct clkdm_ops - Arch specific function implementations |
| 129 | * @clkdm_add_wkdep: Add a wakeup dependency between clk domains | 129 | * @clkdm_add_wkdep: Add a wakeup dependency between clk domains |
| 130 | * @clkdm_del_wkdep: Delete a wakeup dependency between clk domains | 130 | * @clkdm_del_wkdep: Delete a wakeup dependency between clk domains |
| 131 | * @clkdm_read_wkdep: Read wakeup dependency state between clk domains | 131 | * @clkdm_read_wkdep: Read wakeup dependency state between clk domains |
diff --git a/arch/arm/mach-omap2/cpuidle34xx.c b/arch/arm/mach-omap2/cpuidle34xx.c index a44c52303405..1c240eff3918 100644 --- a/arch/arm/mach-omap2/cpuidle34xx.c +++ b/arch/arm/mach-omap2/cpuidle34xx.c | |||
| @@ -297,8 +297,8 @@ DEFINE_PER_CPU(struct cpuidle_device, omap3_idle_dev); | |||
| 297 | 297 | ||
| 298 | /** | 298 | /** |
| 299 | * omap3_cpuidle_update_states() - Update the cpuidle states | 299 | * omap3_cpuidle_update_states() - Update the cpuidle states |
| 300 | * @mpu_deepest_state: Enable states upto and including this for mpu domain | 300 | * @mpu_deepest_state: Enable states up to and including this for mpu domain |
| 301 | * @core_deepest_state: Enable states upto and including this for core domain | 301 | * @core_deepest_state: Enable states up to and including this for core domain |
| 302 | * | 302 | * |
| 303 | * This goes through the list of states available and enables and disables the | 303 | * This goes through the list of states available and enables and disables the |
| 304 | * validity of C states based on deepest state that can be achieved for the | 304 | * validity of C states based on deepest state that can be achieved for the |
diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c index 0d2d6a9c303c..7b8558564591 100644 --- a/arch/arm/mach-omap2/devices.c +++ b/arch/arm/mach-omap2/devices.c | |||
| @@ -35,6 +35,7 @@ | |||
| 35 | 35 | ||
| 36 | #include "mux.h" | 36 | #include "mux.h" |
| 37 | #include "control.h" | 37 | #include "control.h" |
| 38 | #include "devices.h" | ||
| 38 | 39 | ||
| 39 | #define L3_MODULES_MAX_LEN 12 | 40 | #define L3_MODULES_MAX_LEN 12 |
| 40 | #define L3_MODULES 3 | 41 | #define L3_MODULES 3 |
| @@ -65,7 +66,7 @@ static int __init omap3_l3_init(void) | |||
| 65 | 66 | ||
| 66 | WARN(IS_ERR(od), "could not build omap_device for %s\n", oh_name); | 67 | WARN(IS_ERR(od), "could not build omap_device for %s\n", oh_name); |
| 67 | 68 | ||
| 68 | return PTR_ERR(od); | 69 | return IS_ERR(od) ? PTR_ERR(od) : 0; |
| 69 | } | 70 | } |
| 70 | postcore_initcall(omap3_l3_init); | 71 | postcore_initcall(omap3_l3_init); |
| 71 | 72 | ||
| @@ -102,7 +103,7 @@ postcore_initcall(omap4_l3_init); | |||
| 102 | 103 | ||
| 103 | #if defined(CONFIG_VIDEO_OMAP2) || defined(CONFIG_VIDEO_OMAP2_MODULE) | 104 | #if defined(CONFIG_VIDEO_OMAP2) || defined(CONFIG_VIDEO_OMAP2_MODULE) |
| 104 | 105 | ||
| 105 | static struct resource cam_resources[] = { | 106 | static struct resource omap2cam_resources[] = { |
| 106 | { | 107 | { |
| 107 | .start = OMAP24XX_CAMERA_BASE, | 108 | .start = OMAP24XX_CAMERA_BASE, |
| 108 | .end = OMAP24XX_CAMERA_BASE + 0xfff, | 109 | .end = OMAP24XX_CAMERA_BASE + 0xfff, |
| @@ -114,19 +115,13 @@ static struct resource cam_resources[] = { | |||
| 114 | } | 115 | } |
| 115 | }; | 116 | }; |
| 116 | 117 | ||
| 117 | static struct platform_device omap_cam_device = { | 118 | static struct platform_device omap2cam_device = { |
| 118 | .name = "omap24xxcam", | 119 | .name = "omap24xxcam", |
| 119 | .id = -1, | 120 | .id = -1, |
| 120 | .num_resources = ARRAY_SIZE(cam_resources), | 121 | .num_resources = ARRAY_SIZE(omap2cam_resources), |
| 121 | .resource = cam_resources, | 122 | .resource = omap2cam_resources, |
| 122 | }; | 123 | }; |
| 123 | 124 | #endif | |
| 124 | static inline void omap_init_camera(void) | ||
| 125 | { | ||
| 126 | platform_device_register(&omap_cam_device); | ||
| 127 | } | ||
| 128 | |||
| 129 | #elif defined(CONFIG_VIDEO_OMAP3) || defined(CONFIG_VIDEO_OMAP3_MODULE) | ||
| 130 | 125 | ||
| 131 | static struct resource omap3isp_resources[] = { | 126 | static struct resource omap3isp_resources[] = { |
| 132 | { | 127 | { |
| @@ -135,11 +130,6 @@ static struct resource omap3isp_resources[] = { | |||
| 135 | .flags = IORESOURCE_MEM, | 130 | .flags = IORESOURCE_MEM, |
| 136 | }, | 131 | }, |
| 137 | { | 132 | { |
| 138 | .start = OMAP3430_ISP_CBUFF_BASE, | ||
| 139 | .end = OMAP3430_ISP_CBUFF_END, | ||
| 140 | .flags = IORESOURCE_MEM, | ||
| 141 | }, | ||
| 142 | { | ||
| 143 | .start = OMAP3430_ISP_CCP2_BASE, | 133 | .start = OMAP3430_ISP_CCP2_BASE, |
| 144 | .end = OMAP3430_ISP_CCP2_END, | 134 | .end = OMAP3430_ISP_CCP2_END, |
| 145 | .flags = IORESOURCE_MEM, | 135 | .flags = IORESOURCE_MEM, |
| @@ -175,13 +165,33 @@ static struct resource omap3isp_resources[] = { | |||
| 175 | .flags = IORESOURCE_MEM, | 165 | .flags = IORESOURCE_MEM, |
| 176 | }, | 166 | }, |
| 177 | { | 167 | { |
| 178 | .start = OMAP3430_ISP_CSI2A_BASE, | 168 | .start = OMAP3430_ISP_CSI2A_REGS1_BASE, |
| 179 | .end = OMAP3430_ISP_CSI2A_END, | 169 | .end = OMAP3430_ISP_CSI2A_REGS1_END, |
| 180 | .flags = IORESOURCE_MEM, | 170 | .flags = IORESOURCE_MEM, |
| 181 | }, | 171 | }, |
| 182 | { | 172 | { |
| 183 | .start = OMAP3430_ISP_CSI2PHY_BASE, | 173 | .start = OMAP3430_ISP_CSIPHY2_BASE, |
| 184 | .end = OMAP3430_ISP_CSI2PHY_END, | 174 | .end = OMAP3430_ISP_CSIPHY2_END, |
| 175 | .flags = IORESOURCE_MEM, | ||
| 176 | }, | ||
| 177 | { | ||
| 178 | .start = OMAP3630_ISP_CSI2A_REGS2_BASE, | ||
| 179 | .end = OMAP3630_ISP_CSI2A_REGS2_END, | ||
| 180 | .flags = IORESOURCE_MEM, | ||
| 181 | }, | ||
| 182 | { | ||
| 183 | .start = OMAP3630_ISP_CSI2C_REGS1_BASE, | ||
| 184 | .end = OMAP3630_ISP_CSI2C_REGS1_END, | ||
| 185 | .flags = IORESOURCE_MEM, | ||
| 186 | }, | ||
| 187 | { | ||
| 188 | .start = OMAP3630_ISP_CSIPHY1_BASE, | ||
| 189 | .end = OMAP3630_ISP_CSIPHY1_END, | ||
| 190 | .flags = IORESOURCE_MEM, | ||
| 191 | }, | ||
| 192 | { | ||
| 193 | .start = OMAP3630_ISP_CSI2C_REGS2_BASE, | ||
| 194 | .end = OMAP3630_ISP_CSI2C_REGS2_END, | ||
| 185 | .flags = IORESOURCE_MEM, | 195 | .flags = IORESOURCE_MEM, |
| 186 | }, | 196 | }, |
| 187 | { | 197 | { |
| @@ -197,15 +207,19 @@ static struct platform_device omap3isp_device = { | |||
| 197 | .resource = omap3isp_resources, | 207 | .resource = omap3isp_resources, |
| 198 | }; | 208 | }; |
| 199 | 209 | ||
| 200 | static inline void omap_init_camera(void) | 210 | int omap3_init_camera(struct isp_platform_data *pdata) |
| 201 | { | 211 | { |
| 202 | platform_device_register(&omap3isp_device); | 212 | omap3isp_device.dev.platform_data = pdata; |
| 213 | return platform_device_register(&omap3isp_device); | ||
| 203 | } | 214 | } |
| 204 | #else | 215 | |
| 205 | static inline void omap_init_camera(void) | 216 | static inline void omap_init_camera(void) |
| 206 | { | 217 | { |
| 207 | } | 218 | #if defined(CONFIG_VIDEO_OMAP2) || defined(CONFIG_VIDEO_OMAP2_MODULE) |
| 219 | if (cpu_is_omap24xx()) | ||
| 220 | platform_device_register(&omap2cam_device); | ||
| 208 | #endif | 221 | #endif |
| 222 | } | ||
| 209 | 223 | ||
| 210 | struct omap_device_pm_latency omap_keyboard_latency[] = { | 224 | struct omap_device_pm_latency omap_keyboard_latency[] = { |
| 211 | { | 225 | { |
| @@ -239,7 +253,7 @@ int __init omap4_keyboard_init(struct omap4_keypad_platform_data | |||
| 239 | ARRAY_SIZE(omap_keyboard_latency), 0); | 253 | ARRAY_SIZE(omap_keyboard_latency), 0); |
| 240 | 254 | ||
| 241 | if (IS_ERR(od)) { | 255 | if (IS_ERR(od)) { |
| 242 | WARN(1, "Cant build omap_device for %s:%s.\n", | 256 | WARN(1, "Can't build omap_device for %s:%s.\n", |
| 243 | name, oh->name); | 257 | name, oh->name); |
| 244 | return PTR_ERR(od); | 258 | return PTR_ERR(od); |
| 245 | } | 259 | } |
| @@ -359,7 +373,7 @@ static int omap_mcspi_init(struct omap_hwmod *oh, void *unused) | |||
| 359 | od = omap_device_build(name, spi_num, oh, pdata, | 373 | od = omap_device_build(name, spi_num, oh, pdata, |
| 360 | sizeof(*pdata), omap_mcspi_latency, | 374 | sizeof(*pdata), omap_mcspi_latency, |
| 361 | ARRAY_SIZE(omap_mcspi_latency), 0); | 375 | ARRAY_SIZE(omap_mcspi_latency), 0); |
| 362 | WARN(IS_ERR(od), "Cant build omap_device for %s:%s\n", | 376 | WARN(IS_ERR(od), "Can't build omap_device for %s:%s\n", |
| 363 | name, oh->name); | 377 | name, oh->name); |
| 364 | kfree(pdata); | 378 | kfree(pdata); |
| 365 | return 0; | 379 | return 0; |
| @@ -711,7 +725,7 @@ static int __init omap_init_wdt(void) | |||
| 711 | od = omap_device_build(dev_name, id, oh, NULL, 0, | 725 | od = omap_device_build(dev_name, id, oh, NULL, 0, |
| 712 | omap_wdt_latency, | 726 | omap_wdt_latency, |
| 713 | ARRAY_SIZE(omap_wdt_latency), 0); | 727 | ARRAY_SIZE(omap_wdt_latency), 0); |
| 714 | WARN(IS_ERR(od), "Cant build omap_device for %s:%s.\n", | 728 | WARN(IS_ERR(od), "Can't build omap_device for %s:%s.\n", |
| 715 | dev_name, oh->name); | 729 | dev_name, oh->name); |
| 716 | return 0; | 730 | return 0; |
| 717 | } | 731 | } |
diff --git a/arch/arm/mach-omap2/devices.h b/arch/arm/mach-omap2/devices.h new file mode 100644 index 000000000000..f61eb6e5d136 --- /dev/null +++ b/arch/arm/mach-omap2/devices.h | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-omap2/devices.h | ||
| 3 | * | ||
| 4 | * OMAP2 platform device setup/initialization | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or | ||
| 9 | * (at your option) any later version. | ||
| 10 | */ | ||
| 11 | |||
| 12 | #ifndef __ARCH_ARM_MACH_OMAP_DEVICES_H | ||
| 13 | #define __ARCH_ARM_MACH_OMAP_DEVICES_H | ||
| 14 | |||
| 15 | struct isp_platform_data; | ||
| 16 | |||
| 17 | int omap3_init_camera(struct isp_platform_data *pdata); | ||
| 18 | |||
| 19 | #endif | ||
diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c index b18db84b0349..256d23fb79ab 100644 --- a/arch/arm/mach-omap2/display.c +++ b/arch/arm/mach-omap2/display.c | |||
| @@ -23,6 +23,8 @@ | |||
| 23 | #include <linux/err.h> | 23 | #include <linux/err.h> |
| 24 | 24 | ||
| 25 | #include <plat/display.h> | 25 | #include <plat/display.h> |
| 26 | #include <plat/omap_hwmod.h> | ||
| 27 | #include <plat/omap_device.h> | ||
| 26 | 28 | ||
| 27 | static struct platform_device omap_display_device = { | 29 | static struct platform_device omap_display_device = { |
| 28 | .name = "omapdss", | 30 | .name = "omapdss", |
| @@ -32,9 +34,87 @@ static struct platform_device omap_display_device = { | |||
| 32 | }, | 34 | }, |
| 33 | }; | 35 | }; |
| 34 | 36 | ||
| 37 | static struct omap_device_pm_latency omap_dss_latency[] = { | ||
| 38 | [0] = { | ||
| 39 | .deactivate_func = omap_device_idle_hwmods, | ||
| 40 | .activate_func = omap_device_enable_hwmods, | ||
| 41 | .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST, | ||
| 42 | }, | ||
| 43 | }; | ||
| 44 | |||
| 45 | /* oh_core is used for getting opt-clocks */ | ||
| 46 | static struct omap_hwmod *oh_core; | ||
| 47 | |||
| 48 | static bool opt_clock_available(const char *clk_role) | ||
| 49 | { | ||
| 50 | int i; | ||
| 51 | |||
| 52 | for (i = 0; i < oh_core->opt_clks_cnt; i++) { | ||
| 53 | if (!strcmp(oh_core->opt_clks[i].role, clk_role)) | ||
| 54 | return true; | ||
| 55 | } | ||
| 56 | return false; | ||
| 57 | } | ||
| 58 | |||
| 35 | int __init omap_display_init(struct omap_dss_board_info *board_data) | 59 | int __init omap_display_init(struct omap_dss_board_info *board_data) |
| 36 | { | 60 | { |
| 37 | int r = 0; | 61 | int r = 0; |
| 62 | struct omap_hwmod *oh; | ||
| 63 | struct omap_device *od; | ||
| 64 | int i; | ||
| 65 | struct omap_display_platform_data pdata; | ||
| 66 | |||
| 67 | /* | ||
| 68 | * omap: valid DSS hwmod names | ||
| 69 | * omap2,3,4: dss_core, dss_dispc, dss_rfbi, dss_venc | ||
| 70 | * omap3,4: dss_dsi1 | ||
| 71 | * omap4: dss_dsi2, dss_hdmi | ||
| 72 | */ | ||
| 73 | char *oh_name[] = { "dss_core", "dss_dispc", "dss_rfbi", "dss_venc", | ||
| 74 | "dss_dsi1", "dss_dsi2", "dss_hdmi" }; | ||
| 75 | char *dev_name[] = { "omapdss_dss", "omapdss_dispc", "omapdss_rfbi", | ||
| 76 | "omapdss_venc", "omapdss_dsi1", "omapdss_dsi2", | ||
| 77 | "omapdss_hdmi" }; | ||
| 78 | int oh_count; | ||
| 79 | |||
| 80 | memset(&pdata, 0, sizeof(pdata)); | ||
| 81 | |||
| 82 | if (cpu_is_omap24xx()) | ||
| 83 | oh_count = ARRAY_SIZE(oh_name) - 3; | ||
| 84 | /* last 3 hwmod dev in oh_name are not available for omap2 */ | ||
| 85 | else if (cpu_is_omap44xx()) | ||
| 86 | oh_count = ARRAY_SIZE(oh_name); | ||
| 87 | else | ||
| 88 | oh_count = ARRAY_SIZE(oh_name) - 2; | ||
| 89 | /* last 2 hwmod dev in oh_name are not available for omap3 */ | ||
| 90 | |||
| 91 | /* opt_clks are always associated with dss hwmod */ | ||
| 92 | oh_core = omap_hwmod_lookup("dss_core"); | ||
| 93 | if (!oh_core) { | ||
| 94 | pr_err("Could not look up dss_core.\n"); | ||
| 95 | return -ENODEV; | ||
| 96 | } | ||
| 97 | |||
| 98 | pdata.board_data = board_data; | ||
| 99 | pdata.board_data->get_last_off_on_transaction_id = NULL; | ||
| 100 | pdata.opt_clock_available = opt_clock_available; | ||
| 101 | |||
| 102 | for (i = 0; i < oh_count; i++) { | ||
| 103 | oh = omap_hwmod_lookup(oh_name[i]); | ||
| 104 | if (!oh) { | ||
| 105 | pr_err("Could not look up %s\n", oh_name[i]); | ||
| 106 | return -ENODEV; | ||
| 107 | } | ||
| 108 | |||
| 109 | od = omap_device_build(dev_name[i], -1, oh, &pdata, | ||
| 110 | sizeof(struct omap_display_platform_data), | ||
| 111 | omap_dss_latency, | ||
| 112 | ARRAY_SIZE(omap_dss_latency), 0); | ||
| 113 | |||
| 114 | if (WARN((IS_ERR(od)), "Could not build omap_device for %s\n", | ||
| 115 | oh_name[i])) | ||
| 116 | return -ENODEV; | ||
| 117 | } | ||
| 38 | omap_display_device.dev.platform_data = board_data; | 118 | omap_display_device.dev.platform_data = board_data; |
| 39 | 119 | ||
| 40 | r = platform_device_register(&omap_display_device); | 120 | r = platform_device_register(&omap_display_device); |
diff --git a/arch/arm/mach-omap2/dma.c b/arch/arm/mach-omap2/dma.c index 34922b2d2e3f..c9ff0e79703d 100644 --- a/arch/arm/mach-omap2/dma.c +++ b/arch/arm/mach-omap2/dma.c | |||
| @@ -262,7 +262,7 @@ static int __init omap2_system_dma_init_dev(struct omap_hwmod *oh, void *unused) | |||
| 262 | omap2_dma_latency, ARRAY_SIZE(omap2_dma_latency), 0); | 262 | omap2_dma_latency, ARRAY_SIZE(omap2_dma_latency), 0); |
| 263 | kfree(p); | 263 | kfree(p); |
| 264 | if (IS_ERR(od)) { | 264 | if (IS_ERR(od)) { |
| 265 | pr_err("%s: Cant build omap_device for %s:%s.\n", | 265 | pr_err("%s: Can't build omap_device for %s:%s.\n", |
| 266 | __func__, name, oh->name); | 266 | __func__, name, oh->name); |
| 267 | return PTR_ERR(od); | 267 | return PTR_ERR(od); |
| 268 | } | 268 | } |
diff --git a/arch/arm/mach-omap2/gpio.c b/arch/arm/mach-omap2/gpio.c index 413de18c1d2b..9529842ae054 100644 --- a/arch/arm/mach-omap2/gpio.c +++ b/arch/arm/mach-omap2/gpio.c | |||
| @@ -82,7 +82,7 @@ static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused) | |||
| 82 | kfree(pdata); | 82 | kfree(pdata); |
| 83 | 83 | ||
| 84 | if (IS_ERR(od)) { | 84 | if (IS_ERR(od)) { |
| 85 | WARN(1, "Cant build omap_device for %s:%s.\n", | 85 | WARN(1, "Can't build omap_device for %s:%s.\n", |
| 86 | name, oh->name); | 86 | name, oh->name); |
| 87 | return PTR_ERR(od); | 87 | return PTR_ERR(od); |
| 88 | } | 88 | } |
diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c index 674174365f78..130034bf01d5 100644 --- a/arch/arm/mach-omap2/gpmc.c +++ b/arch/arm/mach-omap2/gpmc.c | |||
| @@ -693,6 +693,7 @@ static int __init gpmc_init(void) | |||
| 693 | { | 693 | { |
| 694 | u32 l, irq; | 694 | u32 l, irq; |
| 695 | int cs, ret = -EINVAL; | 695 | int cs, ret = -EINVAL; |
| 696 | int gpmc_irq; | ||
| 696 | char *ck = NULL; | 697 | char *ck = NULL; |
| 697 | 698 | ||
| 698 | if (cpu_is_omap24xx()) { | 699 | if (cpu_is_omap24xx()) { |
| @@ -701,12 +702,15 @@ static int __init gpmc_init(void) | |||
| 701 | l = OMAP2420_GPMC_BASE; | 702 | l = OMAP2420_GPMC_BASE; |
| 702 | else | 703 | else |
| 703 | l = OMAP34XX_GPMC_BASE; | 704 | l = OMAP34XX_GPMC_BASE; |
| 705 | gpmc_irq = INT_34XX_GPMC_IRQ; | ||
| 704 | } else if (cpu_is_omap34xx()) { | 706 | } else if (cpu_is_omap34xx()) { |
| 705 | ck = "gpmc_fck"; | 707 | ck = "gpmc_fck"; |
| 706 | l = OMAP34XX_GPMC_BASE; | 708 | l = OMAP34XX_GPMC_BASE; |
| 709 | gpmc_irq = INT_34XX_GPMC_IRQ; | ||
| 707 | } else if (cpu_is_omap44xx()) { | 710 | } else if (cpu_is_omap44xx()) { |
| 708 | ck = "gpmc_ck"; | 711 | ck = "gpmc_ck"; |
| 709 | l = OMAP44XX_GPMC_BASE; | 712 | l = OMAP44XX_GPMC_BASE; |
| 713 | gpmc_irq = OMAP44XX_IRQ_GPMC; | ||
| 710 | } | 714 | } |
| 711 | 715 | ||
| 712 | if (WARN_ON(!ck)) | 716 | if (WARN_ON(!ck)) |
| @@ -739,16 +743,17 @@ static int __init gpmc_init(void) | |||
| 739 | /* initalize the irq_chained */ | 743 | /* initalize the irq_chained */ |
| 740 | irq = OMAP_GPMC_IRQ_BASE; | 744 | irq = OMAP_GPMC_IRQ_BASE; |
| 741 | for (cs = 0; cs < GPMC_CS_NUM; cs++) { | 745 | for (cs = 0; cs < GPMC_CS_NUM; cs++) { |
| 742 | set_irq_handler(irq, handle_simple_irq); | 746 | irq_set_chip_and_handler(irq, &dummy_irq_chip, |
| 747 | handle_simple_irq); | ||
| 743 | set_irq_flags(irq, IRQF_VALID); | 748 | set_irq_flags(irq, IRQF_VALID); |
| 744 | irq++; | 749 | irq++; |
| 745 | } | 750 | } |
| 746 | 751 | ||
| 747 | ret = request_irq(INT_34XX_GPMC_IRQ, | 752 | ret = request_irq(gpmc_irq, |
| 748 | gpmc_handle_irq, IRQF_SHARED, "gpmc", gpmc_base); | 753 | gpmc_handle_irq, IRQF_SHARED, "gpmc", gpmc_base); |
| 749 | if (ret) | 754 | if (ret) |
| 750 | pr_err("gpmc: irq-%d could not claim: err %d\n", | 755 | pr_err("gpmc: irq-%d could not claim: err %d\n", |
| 751 | INT_34XX_GPMC_IRQ, ret); | 756 | gpmc_irq, ret); |
| 752 | return ret; | 757 | return ret; |
| 753 | } | 758 | } |
| 754 | postcore_initcall(gpmc_init); | 759 | postcore_initcall(gpmc_init); |
| @@ -757,8 +762,6 @@ static irqreturn_t gpmc_handle_irq(int irq, void *dev) | |||
| 757 | { | 762 | { |
| 758 | u8 cs; | 763 | u8 cs; |
| 759 | 764 | ||
| 760 | if (irq != INT_34XX_GPMC_IRQ) | ||
| 761 | return IRQ_HANDLED; | ||
| 762 | /* check cs to invoke the irq */ | 765 | /* check cs to invoke the irq */ |
| 763 | cs = ((gpmc_read_reg(GPMC_PREFETCH_CONFIG1)) >> CS_NUM_SHIFT) & 0x7; | 766 | cs = ((gpmc_read_reg(GPMC_PREFETCH_CONFIG1)) >> CS_NUM_SHIFT) & 0x7; |
| 764 | if (OMAP_GPMC_IRQ_BASE+cs <= OMAP_GPMC_IRQ_END) | 767 | if (OMAP_GPMC_IRQ_BASE+cs <= OMAP_GPMC_IRQ_END) |
diff --git a/arch/arm/mach-omap2/hsmmc.c b/arch/arm/mach-omap2/hsmmc.c index 137e1a5f3d85..b2f30bed5a20 100644 --- a/arch/arm/mach-omap2/hsmmc.c +++ b/arch/arm/mach-omap2/hsmmc.c | |||
| @@ -465,7 +465,7 @@ void __init omap_init_hsmmc(struct omap2_hsmmc_info *hsmmcinfo, int ctrl_nr) | |||
| 465 | od = omap_device_build(name, ctrl_nr - 1, oh, mmc_data, | 465 | od = omap_device_build(name, ctrl_nr - 1, oh, mmc_data, |
| 466 | sizeof(struct omap_mmc_platform_data), ohl, ohl_cnt, false); | 466 | sizeof(struct omap_mmc_platform_data), ohl, ohl_cnt, false); |
| 467 | if (IS_ERR(od)) { | 467 | if (IS_ERR(od)) { |
| 468 | WARN(1, "Cant build omap_device for %s:%s.\n", name, oh->name); | 468 | WARN(1, "Can't build omap_device for %s:%s.\n", name, oh->name); |
| 469 | kfree(mmc_data->slots[0].name); | 469 | kfree(mmc_data->slots[0].name); |
| 470 | goto done; | 470 | goto done; |
| 471 | } | 471 | } |
diff --git a/arch/arm/mach-omap2/irq.c b/arch/arm/mach-omap2/irq.c index bc524b94fd59..237e4530abf2 100644 --- a/arch/arm/mach-omap2/irq.c +++ b/arch/arm/mach-omap2/irq.c | |||
| @@ -223,8 +223,7 @@ void __init omap_init_irq(void) | |||
| 223 | nr_of_irqs, nr_banks, nr_banks > 1 ? "s" : ""); | 223 | nr_of_irqs, nr_banks, nr_banks > 1 ? "s" : ""); |
| 224 | 224 | ||
| 225 | for (i = 0; i < nr_of_irqs; i++) { | 225 | for (i = 0; i < nr_of_irqs; i++) { |
| 226 | set_irq_chip(i, &omap_irq_chip); | 226 | irq_set_chip_and_handler(i, &omap_irq_chip, handle_level_irq); |
| 227 | set_irq_handler(i, handle_level_irq); | ||
| 228 | set_irq_flags(i, IRQF_VALID); | 227 | set_irq_flags(i, IRQF_VALID); |
| 229 | } | 228 | } |
| 230 | } | 229 | } |
diff --git a/arch/arm/mach-omap2/mcbsp.c b/arch/arm/mach-omap2/mcbsp.c index 565b9064a328..4a6ef6ab8458 100644 --- a/arch/arm/mach-omap2/mcbsp.c +++ b/arch/arm/mach-omap2/mcbsp.c | |||
| @@ -149,7 +149,7 @@ static int omap_init_mcbsp(struct omap_hwmod *oh, void *unused) | |||
| 149 | ARRAY_SIZE(omap2_mcbsp_latency), false); | 149 | ARRAY_SIZE(omap2_mcbsp_latency), false); |
| 150 | kfree(pdata); | 150 | kfree(pdata); |
| 151 | if (IS_ERR(od)) { | 151 | if (IS_ERR(od)) { |
| 152 | pr_err("%s: Cant build omap_device for %s:%s.\n", __func__, | 152 | pr_err("%s: Can't build omap_device for %s:%s.\n", __func__, |
| 153 | name, oh->name); | 153 | name, oh->name); |
| 154 | return PTR_ERR(od); | 154 | return PTR_ERR(od); |
| 155 | } | 155 | } |
diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c index bb043cbb3886..a4ab1e364313 100644 --- a/arch/arm/mach-omap2/mux.c +++ b/arch/arm/mach-omap2/mux.c | |||
| @@ -518,7 +518,7 @@ static int omap_mux_dbg_board_show(struct seq_file *s, void *unused) | |||
| 518 | seq_printf(s, "/* %s */\n", m->muxnames[mode]); | 518 | seq_printf(s, "/* %s */\n", m->muxnames[mode]); |
| 519 | 519 | ||
| 520 | /* | 520 | /* |
| 521 | * XXX: Might be revisited to support differences accross | 521 | * XXX: Might be revisited to support differences across |
| 522 | * same OMAP generation. | 522 | * same OMAP generation. |
| 523 | */ | 523 | */ |
| 524 | seq_printf(s, "OMAP%d_MUX(%s, ", omap_gen, m0_def); | 524 | seq_printf(s, "OMAP%d_MUX(%s, ", omap_gen, m0_def); |
diff --git a/arch/arm/mach-omap2/mux2430.h b/arch/arm/mach-omap2/mux2430.h index adbea0d03e08..9fd93149ebd9 100644 --- a/arch/arm/mach-omap2/mux2430.h +++ b/arch/arm/mach-omap2/mux2430.h | |||
| @@ -22,7 +22,7 @@ | |||
| 22 | * absolute addresses. The name in the macro is the mode-0 name of | 22 | * absolute addresses. The name in the macro is the mode-0 name of |
| 23 | * the pin. NOTE: These registers are 8-bits wide. | 23 | * the pin. NOTE: These registers are 8-bits wide. |
| 24 | * | 24 | * |
| 25 | * Note that these defines use SDMMC instead of MMC for compability | 25 | * Note that these defines use SDMMC instead of MMC for compatibility |
| 26 | * with signal names used in 3630. | 26 | * with signal names used in 3630. |
| 27 | */ | 27 | */ |
| 28 | #define OMAP2430_CONTROL_PADCONF_GPMC_CLK_OFFSET 0x000 | 28 | #define OMAP2430_CONTROL_PADCONF_GPMC_CLK_OFFSET 0x000 |
diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c b/arch/arm/mach-omap2/omap_hwmod_2420_data.c index 62823467163b..8eb3ce1bbfbe 100644 --- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c | |||
| @@ -1168,11 +1168,6 @@ static struct omap_hwmod_class omap2420_dss_hwmod_class = { | |||
| 1168 | .sysc = &omap2420_dss_sysc, | 1168 | .sysc = &omap2420_dss_sysc, |
| 1169 | }; | 1169 | }; |
| 1170 | 1170 | ||
| 1171 | /* dss */ | ||
| 1172 | static struct omap_hwmod_irq_info omap2420_dss_irqs[] = { | ||
| 1173 | { .irq = 25 }, | ||
| 1174 | }; | ||
| 1175 | |||
| 1176 | static struct omap_hwmod_dma_info omap2420_dss_sdma_chs[] = { | 1171 | static struct omap_hwmod_dma_info omap2420_dss_sdma_chs[] = { |
| 1177 | { .name = "dispc", .dma_req = 5 }, | 1172 | { .name = "dispc", .dma_req = 5 }, |
| 1178 | }; | 1173 | }; |
| @@ -1221,8 +1216,6 @@ static struct omap_hwmod omap2420_dss_core_hwmod = { | |||
| 1221 | .name = "dss_core", | 1216 | .name = "dss_core", |
| 1222 | .class = &omap2420_dss_hwmod_class, | 1217 | .class = &omap2420_dss_hwmod_class, |
| 1223 | .main_clk = "dss1_fck", /* instead of dss_fck */ | 1218 | .main_clk = "dss1_fck", /* instead of dss_fck */ |
| 1224 | .mpu_irqs = omap2420_dss_irqs, | ||
| 1225 | .mpu_irqs_cnt = ARRAY_SIZE(omap2420_dss_irqs), | ||
| 1226 | .sdma_reqs = omap2420_dss_sdma_chs, | 1219 | .sdma_reqs = omap2420_dss_sdma_chs, |
| 1227 | .sdma_reqs_cnt = ARRAY_SIZE(omap2420_dss_sdma_chs), | 1220 | .sdma_reqs_cnt = ARRAY_SIZE(omap2420_dss_sdma_chs), |
| 1228 | .prcm = { | 1221 | .prcm = { |
| @@ -1265,6 +1258,10 @@ static struct omap_hwmod_class omap2420_dispc_hwmod_class = { | |||
| 1265 | .sysc = &omap2420_dispc_sysc, | 1258 | .sysc = &omap2420_dispc_sysc, |
| 1266 | }; | 1259 | }; |
| 1267 | 1260 | ||
| 1261 | static struct omap_hwmod_irq_info omap2420_dispc_irqs[] = { | ||
| 1262 | { .irq = 25 }, | ||
| 1263 | }; | ||
| 1264 | |||
| 1268 | static struct omap_hwmod_addr_space omap2420_dss_dispc_addrs[] = { | 1265 | static struct omap_hwmod_addr_space omap2420_dss_dispc_addrs[] = { |
| 1269 | { | 1266 | { |
| 1270 | .pa_start = 0x48050400, | 1267 | .pa_start = 0x48050400, |
| @@ -1297,6 +1294,8 @@ static struct omap_hwmod_ocp_if *omap2420_dss_dispc_slaves[] = { | |||
| 1297 | static struct omap_hwmod omap2420_dss_dispc_hwmod = { | 1294 | static struct omap_hwmod omap2420_dss_dispc_hwmod = { |
| 1298 | .name = "dss_dispc", | 1295 | .name = "dss_dispc", |
| 1299 | .class = &omap2420_dispc_hwmod_class, | 1296 | .class = &omap2420_dispc_hwmod_class, |
| 1297 | .mpu_irqs = omap2420_dispc_irqs, | ||
| 1298 | .mpu_irqs_cnt = ARRAY_SIZE(omap2420_dispc_irqs), | ||
| 1300 | .main_clk = "dss1_fck", | 1299 | .main_clk = "dss1_fck", |
| 1301 | .prcm = { | 1300 | .prcm = { |
| 1302 | .omap2 = { | 1301 | .omap2 = { |
diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c b/arch/arm/mach-omap2/omap_hwmod_2430_data.c index 0fdf2cabfb12..e6e3810db77f 100644 --- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_2430_data.c | |||
| @@ -1268,10 +1268,6 @@ static struct omap_hwmod_class omap2430_dss_hwmod_class = { | |||
| 1268 | .sysc = &omap2430_dss_sysc, | 1268 | .sysc = &omap2430_dss_sysc, |
| 1269 | }; | 1269 | }; |
| 1270 | 1270 | ||
| 1271 | /* dss */ | ||
| 1272 | static struct omap_hwmod_irq_info omap2430_dss_irqs[] = { | ||
| 1273 | { .irq = 25 }, | ||
| 1274 | }; | ||
| 1275 | static struct omap_hwmod_dma_info omap2430_dss_sdma_chs[] = { | 1271 | static struct omap_hwmod_dma_info omap2430_dss_sdma_chs[] = { |
| 1276 | { .name = "dispc", .dma_req = 5 }, | 1272 | { .name = "dispc", .dma_req = 5 }, |
| 1277 | }; | 1273 | }; |
| @@ -1314,8 +1310,6 @@ static struct omap_hwmod omap2430_dss_core_hwmod = { | |||
| 1314 | .name = "dss_core", | 1310 | .name = "dss_core", |
| 1315 | .class = &omap2430_dss_hwmod_class, | 1311 | .class = &omap2430_dss_hwmod_class, |
| 1316 | .main_clk = "dss1_fck", /* instead of dss_fck */ | 1312 | .main_clk = "dss1_fck", /* instead of dss_fck */ |
| 1317 | .mpu_irqs = omap2430_dss_irqs, | ||
| 1318 | .mpu_irqs_cnt = ARRAY_SIZE(omap2430_dss_irqs), | ||
| 1319 | .sdma_reqs = omap2430_dss_sdma_chs, | 1313 | .sdma_reqs = omap2430_dss_sdma_chs, |
| 1320 | .sdma_reqs_cnt = ARRAY_SIZE(omap2430_dss_sdma_chs), | 1314 | .sdma_reqs_cnt = ARRAY_SIZE(omap2430_dss_sdma_chs), |
| 1321 | .prcm = { | 1315 | .prcm = { |
| @@ -1358,6 +1352,10 @@ static struct omap_hwmod_class omap2430_dispc_hwmod_class = { | |||
| 1358 | .sysc = &omap2430_dispc_sysc, | 1352 | .sysc = &omap2430_dispc_sysc, |
| 1359 | }; | 1353 | }; |
| 1360 | 1354 | ||
| 1355 | static struct omap_hwmod_irq_info omap2430_dispc_irqs[] = { | ||
| 1356 | { .irq = 25 }, | ||
| 1357 | }; | ||
| 1358 | |||
| 1361 | static struct omap_hwmod_addr_space omap2430_dss_dispc_addrs[] = { | 1359 | static struct omap_hwmod_addr_space omap2430_dss_dispc_addrs[] = { |
| 1362 | { | 1360 | { |
| 1363 | .pa_start = 0x48050400, | 1361 | .pa_start = 0x48050400, |
| @@ -1384,6 +1382,8 @@ static struct omap_hwmod_ocp_if *omap2430_dss_dispc_slaves[] = { | |||
| 1384 | static struct omap_hwmod omap2430_dss_dispc_hwmod = { | 1382 | static struct omap_hwmod omap2430_dss_dispc_hwmod = { |
| 1385 | .name = "dss_dispc", | 1383 | .name = "dss_dispc", |
| 1386 | .class = &omap2430_dispc_hwmod_class, | 1384 | .class = &omap2430_dispc_hwmod_class, |
| 1385 | .mpu_irqs = omap2430_dispc_irqs, | ||
| 1386 | .mpu_irqs_cnt = ARRAY_SIZE(omap2430_dispc_irqs), | ||
| 1387 | .main_clk = "dss1_fck", | 1387 | .main_clk = "dss1_fck", |
| 1388 | .prcm = { | 1388 | .prcm = { |
| 1389 | .omap2 = { | 1389 | .omap2 = { |
| @@ -1559,7 +1559,7 @@ static struct omap_hwmod omap2430_i2c1_hwmod = { | |||
| 1559 | * I2CHS IP's do not follow the usual pattern. | 1559 | * I2CHS IP's do not follow the usual pattern. |
| 1560 | * prcm_reg_id alone cannot be used to program | 1560 | * prcm_reg_id alone cannot be used to program |
| 1561 | * the iclk and fclk. Needs to be handled using | 1561 | * the iclk and fclk. Needs to be handled using |
| 1562 | * additonal flags when clk handling is moved | 1562 | * additional flags when clk handling is moved |
| 1563 | * to hwmod framework. | 1563 | * to hwmod framework. |
| 1564 | */ | 1564 | */ |
| 1565 | .module_offs = CORE_MOD, | 1565 | .module_offs = CORE_MOD, |
diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c index c819c306693a..b98e2dfcba28 100644 --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | |||
| @@ -1480,11 +1480,6 @@ static struct omap_hwmod_class omap3xxx_dss_hwmod_class = { | |||
| 1480 | .sysc = &omap3xxx_dss_sysc, | 1480 | .sysc = &omap3xxx_dss_sysc, |
| 1481 | }; | 1481 | }; |
| 1482 | 1482 | ||
| 1483 | /* dss */ | ||
| 1484 | static struct omap_hwmod_irq_info omap3xxx_dss_irqs[] = { | ||
| 1485 | { .irq = 25 }, | ||
| 1486 | }; | ||
| 1487 | |||
| 1488 | static struct omap_hwmod_dma_info omap3xxx_dss_sdma_chs[] = { | 1483 | static struct omap_hwmod_dma_info omap3xxx_dss_sdma_chs[] = { |
| 1489 | { .name = "dispc", .dma_req = 5 }, | 1484 | { .name = "dispc", .dma_req = 5 }, |
| 1490 | { .name = "dsi1", .dma_req = 74 }, | 1485 | { .name = "dsi1", .dma_req = 74 }, |
| @@ -1548,7 +1543,7 @@ static struct omap_hwmod_ocp_if *omap3xxx_dss_slaves[] = { | |||
| 1548 | 1543 | ||
| 1549 | static struct omap_hwmod_opt_clk dss_opt_clks[] = { | 1544 | static struct omap_hwmod_opt_clk dss_opt_clks[] = { |
| 1550 | { .role = "tv_clk", .clk = "dss_tv_fck" }, | 1545 | { .role = "tv_clk", .clk = "dss_tv_fck" }, |
| 1551 | { .role = "dssclk", .clk = "dss_96m_fck" }, | 1546 | { .role = "video_clk", .clk = "dss_96m_fck" }, |
| 1552 | { .role = "sys_clk", .clk = "dss2_alwon_fck" }, | 1547 | { .role = "sys_clk", .clk = "dss2_alwon_fck" }, |
| 1553 | }; | 1548 | }; |
| 1554 | 1549 | ||
| @@ -1556,8 +1551,6 @@ static struct omap_hwmod omap3430es1_dss_core_hwmod = { | |||
| 1556 | .name = "dss_core", | 1551 | .name = "dss_core", |
| 1557 | .class = &omap3xxx_dss_hwmod_class, | 1552 | .class = &omap3xxx_dss_hwmod_class, |
| 1558 | .main_clk = "dss1_alwon_fck", /* instead of dss_fck */ | 1553 | .main_clk = "dss1_alwon_fck", /* instead of dss_fck */ |
| 1559 | .mpu_irqs = omap3xxx_dss_irqs, | ||
| 1560 | .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_dss_irqs), | ||
| 1561 | .sdma_reqs = omap3xxx_dss_sdma_chs, | 1554 | .sdma_reqs = omap3xxx_dss_sdma_chs, |
| 1562 | .sdma_reqs_cnt = ARRAY_SIZE(omap3xxx_dss_sdma_chs), | 1555 | .sdma_reqs_cnt = ARRAY_SIZE(omap3xxx_dss_sdma_chs), |
| 1563 | 1556 | ||
| @@ -1584,8 +1577,6 @@ static struct omap_hwmod omap3xxx_dss_core_hwmod = { | |||
| 1584 | .name = "dss_core", | 1577 | .name = "dss_core", |
| 1585 | .class = &omap3xxx_dss_hwmod_class, | 1578 | .class = &omap3xxx_dss_hwmod_class, |
| 1586 | .main_clk = "dss1_alwon_fck", /* instead of dss_fck */ | 1579 | .main_clk = "dss1_alwon_fck", /* instead of dss_fck */ |
| 1587 | .mpu_irqs = omap3xxx_dss_irqs, | ||
| 1588 | .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_dss_irqs), | ||
| 1589 | .sdma_reqs = omap3xxx_dss_sdma_chs, | 1580 | .sdma_reqs = omap3xxx_dss_sdma_chs, |
| 1590 | .sdma_reqs_cnt = ARRAY_SIZE(omap3xxx_dss_sdma_chs), | 1581 | .sdma_reqs_cnt = ARRAY_SIZE(omap3xxx_dss_sdma_chs), |
| 1591 | 1582 | ||
| @@ -1631,6 +1622,10 @@ static struct omap_hwmod_class omap3xxx_dispc_hwmod_class = { | |||
| 1631 | .sysc = &omap3xxx_dispc_sysc, | 1622 | .sysc = &omap3xxx_dispc_sysc, |
| 1632 | }; | 1623 | }; |
| 1633 | 1624 | ||
| 1625 | static struct omap_hwmod_irq_info omap3xxx_dispc_irqs[] = { | ||
| 1626 | { .irq = 25 }, | ||
| 1627 | }; | ||
| 1628 | |||
| 1634 | static struct omap_hwmod_addr_space omap3xxx_dss_dispc_addrs[] = { | 1629 | static struct omap_hwmod_addr_space omap3xxx_dss_dispc_addrs[] = { |
| 1635 | { | 1630 | { |
| 1636 | .pa_start = 0x48050400, | 1631 | .pa_start = 0x48050400, |
| @@ -1664,6 +1659,8 @@ static struct omap_hwmod_ocp_if *omap3xxx_dss_dispc_slaves[] = { | |||
| 1664 | static struct omap_hwmod omap3xxx_dss_dispc_hwmod = { | 1659 | static struct omap_hwmod omap3xxx_dss_dispc_hwmod = { |
| 1665 | .name = "dss_dispc", | 1660 | .name = "dss_dispc", |
| 1666 | .class = &omap3xxx_dispc_hwmod_class, | 1661 | .class = &omap3xxx_dispc_hwmod_class, |
| 1662 | .mpu_irqs = omap3xxx_dispc_irqs, | ||
| 1663 | .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_dispc_irqs), | ||
| 1667 | .main_clk = "dss1_alwon_fck", | 1664 | .main_clk = "dss1_alwon_fck", |
| 1668 | .prcm = { | 1665 | .prcm = { |
| 1669 | .omap2 = { | 1666 | .omap2 = { |
| @@ -1689,6 +1686,10 @@ static struct omap_hwmod_class omap3xxx_dsi_hwmod_class = { | |||
| 1689 | .name = "dsi", | 1686 | .name = "dsi", |
| 1690 | }; | 1687 | }; |
| 1691 | 1688 | ||
| 1689 | static struct omap_hwmod_irq_info omap3xxx_dsi1_irqs[] = { | ||
| 1690 | { .irq = 25 }, | ||
| 1691 | }; | ||
| 1692 | |||
| 1692 | /* dss_dsi1 */ | 1693 | /* dss_dsi1 */ |
| 1693 | static struct omap_hwmod_addr_space omap3xxx_dss_dsi1_addrs[] = { | 1694 | static struct omap_hwmod_addr_space omap3xxx_dss_dsi1_addrs[] = { |
| 1694 | { | 1695 | { |
| @@ -1722,6 +1723,8 @@ static struct omap_hwmod_ocp_if *omap3xxx_dss_dsi1_slaves[] = { | |||
| 1722 | static struct omap_hwmod omap3xxx_dss_dsi1_hwmod = { | 1723 | static struct omap_hwmod omap3xxx_dss_dsi1_hwmod = { |
| 1723 | .name = "dss_dsi1", | 1724 | .name = "dss_dsi1", |
| 1724 | .class = &omap3xxx_dsi_hwmod_class, | 1725 | .class = &omap3xxx_dsi_hwmod_class, |
| 1726 | .mpu_irqs = omap3xxx_dsi1_irqs, | ||
| 1727 | .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_dsi1_irqs), | ||
| 1725 | .main_clk = "dss1_alwon_fck", | 1728 | .main_clk = "dss1_alwon_fck", |
| 1726 | .prcm = { | 1729 | .prcm = { |
| 1727 | .omap2 = { | 1730 | .omap2 = { |
diff --git a/arch/arm/mach-omap2/omap_l3_smx.c b/arch/arm/mach-omap2/omap_l3_smx.c index 265bff3acb9e..5f2da7565b68 100644 --- a/arch/arm/mach-omap2/omap_l3_smx.c +++ b/arch/arm/mach-omap2/omap_l3_smx.c | |||
| @@ -226,7 +226,6 @@ static int __init omap3_l3_probe(struct platform_device *pdev) | |||
| 226 | struct omap3_l3 *l3; | 226 | struct omap3_l3 *l3; |
| 227 | struct resource *res; | 227 | struct resource *res; |
| 228 | int ret; | 228 | int ret; |
| 229 | int irq; | ||
| 230 | 229 | ||
| 231 | l3 = kzalloc(sizeof(*l3), GFP_KERNEL); | 230 | l3 = kzalloc(sizeof(*l3), GFP_KERNEL); |
| 232 | if (!l3) { | 231 | if (!l3) { |
| @@ -249,18 +248,17 @@ static int __init omap3_l3_probe(struct platform_device *pdev) | |||
| 249 | goto err2; | 248 | goto err2; |
| 250 | } | 249 | } |
| 251 | 250 | ||
| 252 | irq = platform_get_irq(pdev, 0); | 251 | l3->debug_irq = platform_get_irq(pdev, 0); |
| 253 | ret = request_irq(irq, omap3_l3_app_irq, | 252 | ret = request_irq(l3->debug_irq, omap3_l3_app_irq, |
| 254 | IRQF_DISABLED | IRQF_TRIGGER_RISING, | 253 | IRQF_DISABLED | IRQF_TRIGGER_RISING, |
| 255 | "l3-debug-irq", l3); | 254 | "l3-debug-irq", l3); |
| 256 | if (ret) { | 255 | if (ret) { |
| 257 | dev_err(&pdev->dev, "couldn't request debug irq\n"); | 256 | dev_err(&pdev->dev, "couldn't request debug irq\n"); |
| 258 | goto err3; | 257 | goto err3; |
| 259 | } | 258 | } |
| 260 | l3->debug_irq = irq; | ||
| 261 | 259 | ||
| 262 | irq = platform_get_irq(pdev, 1); | 260 | l3->app_irq = platform_get_irq(pdev, 1); |
| 263 | ret = request_irq(irq, omap3_l3_app_irq, | 261 | ret = request_irq(l3->app_irq, omap3_l3_app_irq, |
| 264 | IRQF_DISABLED | IRQF_TRIGGER_RISING, | 262 | IRQF_DISABLED | IRQF_TRIGGER_RISING, |
| 265 | "l3-app-irq", l3); | 263 | "l3-app-irq", l3); |
| 266 | 264 | ||
| @@ -269,7 +267,6 @@ static int __init omap3_l3_probe(struct platform_device *pdev) | |||
| 269 | goto err4; | 267 | goto err4; |
| 270 | } | 268 | } |
| 271 | 269 | ||
| 272 | l3->app_irq = irq; | ||
| 273 | goto err0; | 270 | goto err0; |
| 274 | 271 | ||
| 275 | err4: | 272 | err4: |
diff --git a/arch/arm/mach-omap2/omap_phy_internal.c b/arch/arm/mach-omap2/omap_phy_internal.c index e2e605fe9138..05f6abc96b0d 100644 --- a/arch/arm/mach-omap2/omap_phy_internal.c +++ b/arch/arm/mach-omap2/omap_phy_internal.c | |||
| @@ -112,12 +112,12 @@ int omap4430_phy_power(struct device *dev, int ID, int on) | |||
| 112 | else | 112 | else |
| 113 | /* | 113 | /* |
| 114 | * Enable VBUS Valid, AValid and IDDIG | 114 | * Enable VBUS Valid, AValid and IDDIG |
| 115 | * high impedence | 115 | * high impedance |
| 116 | */ | 116 | */ |
| 117 | __raw_writel(IDDIG | AVALID | VBUSVALID, | 117 | __raw_writel(IDDIG | AVALID | VBUSVALID, |
| 118 | ctrl_base + USBOTGHS_CONTROL); | 118 | ctrl_base + USBOTGHS_CONTROL); |
| 119 | } else { | 119 | } else { |
| 120 | /* Enable session END and IDIG to high impedence. */ | 120 | /* Enable session END and IDIG to high impedance. */ |
| 121 | __raw_writel(SESSEND | IDDIG, ctrl_base + | 121 | __raw_writel(SESSEND | IDDIG, ctrl_base + |
| 122 | USBOTGHS_CONTROL); | 122 | USBOTGHS_CONTROL); |
| 123 | } | 123 | } |
diff --git a/arch/arm/mach-omap2/omap_twl.c b/arch/arm/mach-omap2/omap_twl.c index 0a8e74e3e811..07d6140baa9d 100644 --- a/arch/arm/mach-omap2/omap_twl.c +++ b/arch/arm/mach-omap2/omap_twl.c | |||
| @@ -308,7 +308,7 @@ int __init omap3_twl_init(void) | |||
| 308 | * Strategy Software Scaling Mode (ENABLE_VMODE=0), for setting the voltages, | 308 | * Strategy Software Scaling Mode (ENABLE_VMODE=0), for setting the voltages, |
| 309 | * in those scenarios this bit is to be cleared (enable = false). | 309 | * in those scenarios this bit is to be cleared (enable = false). |
| 310 | * | 310 | * |
| 311 | * Returns 0 on sucess, error is returned if I2C read/write fails. | 311 | * Returns 0 on success, error is returned if I2C read/write fails. |
| 312 | */ | 312 | */ |
| 313 | int __init omap3_twl_set_sr_bit(bool enable) | 313 | int __init omap3_twl_set_sr_bit(bool enable) |
| 314 | { | 314 | { |
diff --git a/arch/arm/mach-omap2/powerdomain.c b/arch/arm/mach-omap2/powerdomain.c index 49c6513e90d8..9af08473bf10 100644 --- a/arch/arm/mach-omap2/powerdomain.c +++ b/arch/arm/mach-omap2/powerdomain.c | |||
| @@ -196,7 +196,7 @@ static int _pwrdm_post_transition_cb(struct powerdomain *pwrdm, void *unused) | |||
| 196 | /** | 196 | /** |
| 197 | * pwrdm_init - set up the powerdomain layer | 197 | * pwrdm_init - set up the powerdomain layer |
| 198 | * @pwrdm_list: array of struct powerdomain pointers to register | 198 | * @pwrdm_list: array of struct powerdomain pointers to register |
| 199 | * @custom_funcs: func pointers for arch specfic implementations | 199 | * @custom_funcs: func pointers for arch specific implementations |
| 200 | * | 200 | * |
| 201 | * Loop through the array of powerdomains @pwrdm_list, registering all | 201 | * Loop through the array of powerdomains @pwrdm_list, registering all |
| 202 | * that are available on the current CPU. If pwrdm_list is supplied | 202 | * that are available on the current CPU. If pwrdm_list is supplied |
diff --git a/arch/arm/mach-omap2/powerdomain.h b/arch/arm/mach-omap2/powerdomain.h index 027f40bd235d..d23d979b9c34 100644 --- a/arch/arm/mach-omap2/powerdomain.h +++ b/arch/arm/mach-omap2/powerdomain.h | |||
| @@ -121,7 +121,7 @@ struct powerdomain { | |||
| 121 | }; | 121 | }; |
| 122 | 122 | ||
| 123 | /** | 123 | /** |
| 124 | * struct pwrdm_ops - Arch specfic function implementations | 124 | * struct pwrdm_ops - Arch specific function implementations |
| 125 | * @pwrdm_set_next_pwrst: Set the target power state for a pd | 125 | * @pwrdm_set_next_pwrst: Set the target power state for a pd |
| 126 | * @pwrdm_read_next_pwrst: Read the target power state set for a pd | 126 | * @pwrdm_read_next_pwrst: Read the target power state set for a pd |
| 127 | * @pwrdm_read_pwrst: Read the current power state of a pd | 127 | * @pwrdm_read_pwrst: Read the current power state of a pd |
diff --git a/arch/arm/mach-omap2/powerdomains3xxx_data.c b/arch/arm/mach-omap2/powerdomains3xxx_data.c index 9c9c113788b9..469a920a74dc 100644 --- a/arch/arm/mach-omap2/powerdomains3xxx_data.c +++ b/arch/arm/mach-omap2/powerdomains3xxx_data.c | |||
| @@ -72,7 +72,7 @@ static struct powerdomain mpu_3xxx_pwrdm = { | |||
| 72 | 72 | ||
| 73 | /* | 73 | /* |
| 74 | * The USBTLL Save-and-Restore mechanism is broken on | 74 | * The USBTLL Save-and-Restore mechanism is broken on |
| 75 | * 3430s upto ES3.0 and 3630ES1.0. Hence this feature | 75 | * 3430s up to ES3.0 and 3630ES1.0. Hence this feature |
| 76 | * needs to be disabled on these chips. | 76 | * needs to be disabled on these chips. |
| 77 | * Refer: 3430 errata ID i459 and 3630 errata ID i579 | 77 | * Refer: 3430 errata ID i459 and 3630 errata ID i579 |
| 78 | * | 78 | * |
diff --git a/arch/arm/mach-omap2/smartreflex.c b/arch/arm/mach-omap2/smartreflex.c index 8f674c9442bf..13e24f913dd4 100644 --- a/arch/arm/mach-omap2/smartreflex.c +++ b/arch/arm/mach-omap2/smartreflex.c | |||
| @@ -247,7 +247,7 @@ static void sr_stop_vddautocomp(struct omap_sr *sr) | |||
| 247 | * driver register and sr device intializtion API's. Only one call | 247 | * driver register and sr device intializtion API's. Only one call |
| 248 | * will ultimately succeed. | 248 | * will ultimately succeed. |
| 249 | * | 249 | * |
| 250 | * Currenly this function registers interrrupt handler for a particular SR | 250 | * Currently this function registers interrrupt handler for a particular SR |
| 251 | * if smartreflex class driver is already registered and has | 251 | * if smartreflex class driver is already registered and has |
| 252 | * requested for interrupts and the SR interrupt line in present. | 252 | * requested for interrupts and the SR interrupt line in present. |
| 253 | */ | 253 | */ |
diff --git a/arch/arm/mach-omap2/timer-mpu.c b/arch/arm/mach-omap2/timer-mpu.c index 954682e64399..31c0ac4cd66a 100644 --- a/arch/arm/mach-omap2/timer-mpu.c +++ b/arch/arm/mach-omap2/timer-mpu.c | |||
| @@ -26,9 +26,14 @@ | |||
| 26 | /* | 26 | /* |
| 27 | * Setup the local clock events for a CPU. | 27 | * Setup the local clock events for a CPU. |
| 28 | */ | 28 | */ |
| 29 | void __cpuinit local_timer_setup(struct clock_event_device *evt) | 29 | int __cpuinit local_timer_setup(struct clock_event_device *evt) |
| 30 | { | 30 | { |
| 31 | /* Local timers are not supprted on OMAP4430 ES1.0 */ | ||
| 32 | if (omap_rev() == OMAP4430_REV_ES1_0) | ||
| 33 | return -ENXIO; | ||
| 34 | |||
| 31 | evt->irq = OMAP44XX_IRQ_LOCALTIMER; | 35 | evt->irq = OMAP44XX_IRQ_LOCALTIMER; |
| 32 | twd_timer_setup(evt); | 36 | twd_timer_setup(evt); |
| 37 | return 0; | ||
| 33 | } | 38 | } |
| 34 | 39 | ||
diff --git a/arch/arm/mach-omap2/voltage.c b/arch/arm/mach-omap2/voltage.c index c6facf7becf8..6fb520999b6e 100644 --- a/arch/arm/mach-omap2/voltage.c +++ b/arch/arm/mach-omap2/voltage.c | |||
| @@ -851,7 +851,7 @@ int omap_voltage_scale_vdd(struct voltagedomain *voltdm, | |||
| 851 | * @voltdm: pointer to the VDD whose voltage is to be reset. | 851 | * @voltdm: pointer to the VDD whose voltage is to be reset. |
| 852 | * | 852 | * |
| 853 | * This API finds out the correct voltage the voltage domain is supposed | 853 | * This API finds out the correct voltage the voltage domain is supposed |
| 854 | * to be at and resets the voltage to that level. Should be used expecially | 854 | * to be at and resets the voltage to that level. Should be used especially |
| 855 | * while disabling any voltage compensation modules. | 855 | * while disabling any voltage compensation modules. |
| 856 | */ | 856 | */ |
| 857 | void omap_voltage_reset(struct voltagedomain *voltdm) | 857 | void omap_voltage_reset(struct voltagedomain *voltdm) |
| @@ -912,7 +912,7 @@ void omap_voltage_get_volttable(struct voltagedomain *voltdm, | |||
| 912 | * This API searches only through the non-compensated voltages int the | 912 | * This API searches only through the non-compensated voltages int the |
| 913 | * voltage table. | 913 | * voltage table. |
| 914 | * Returns pointer to the voltage table entry corresponding to volt on | 914 | * Returns pointer to the voltage table entry corresponding to volt on |
| 915 | * sucess. Returns -ENODATA if no voltage table exisits for the passed voltage | 915 | * success. Returns -ENODATA if no voltage table exisits for the passed voltage |
| 916 | * domain or if there is no matching entry. | 916 | * domain or if there is no matching entry. |
| 917 | */ | 917 | */ |
| 918 | struct omap_volt_data *omap_voltage_get_voltdata(struct voltagedomain *voltdm, | 918 | struct omap_volt_data *omap_voltage_get_voltdata(struct voltagedomain *voltdm, |
