diff options
Diffstat (limited to 'arch/arm/mach-shmobile/board-mackerel.c')
| -rw-r--r-- | arch/arm/mach-shmobile/board-mackerel.c | 272 |
1 files changed, 238 insertions, 34 deletions
diff --git a/arch/arm/mach-shmobile/board-mackerel.c b/arch/arm/mach-shmobile/board-mackerel.c index 7da2ca24229..448ddbe4333 100644 --- a/arch/arm/mach-shmobile/board-mackerel.c +++ b/arch/arm/mach-shmobile/board-mackerel.c | |||
| @@ -43,6 +43,7 @@ | |||
| 43 | #include <linux/sh_intc.h> | 43 | #include <linux/sh_intc.h> |
| 44 | #include <linux/tca6416_keypad.h> | 44 | #include <linux/tca6416_keypad.h> |
| 45 | #include <linux/usb/r8a66597.h> | 45 | #include <linux/usb/r8a66597.h> |
| 46 | #include <linux/usb/renesas_usbhs.h> | ||
| 46 | 47 | ||
| 47 | #include <video/sh_mobile_hdmi.h> | 48 | #include <video/sh_mobile_hdmi.h> |
| 48 | #include <video/sh_mobile_lcdc.h> | 49 | #include <video/sh_mobile_lcdc.h> |
| @@ -143,7 +144,30 @@ | |||
| 143 | * open | external VBUS | Function | 144 | * open | external VBUS | Function |
| 144 | * | 145 | * |
| 145 | * *1 | 146 | * *1 |
| 146 | * CN31 is used as Host in Linux. | 147 | * CN31 is used as |
| 148 | * CONFIG_USB_R8A66597_HCD Host | ||
| 149 | * CONFIG_USB_RENESAS_USBHS Function | ||
| 150 | * | ||
| 151 | * CAUTION | ||
| 152 | * | ||
| 153 | * renesas_usbhs driver can use external interrupt mode | ||
| 154 | * (which come from USB-PHY) or autonomy mode (it use own interrupt) | ||
| 155 | * for detecting connection/disconnection when Function. | ||
| 156 | * USB will be power OFF while it has been disconnecting | ||
| 157 | * if external interrupt mode, and it is always power ON if autonomy mode, | ||
| 158 | * | ||
| 159 | * mackerel can not use external interrupt (IRQ7-PORT167) mode on "USB0", | ||
| 160 | * because Touchscreen is using IRQ7-PORT40. | ||
| 161 | * It is impossible to use IRQ7 demux on this board. | ||
| 162 | * | ||
| 163 | * We can use external interrupt mode USB-Function on "USB1". | ||
| 164 | * USB1 can become Host by r8a66597, and become Function by renesas_usbhs. | ||
| 165 | * But don't select both drivers in same time. | ||
| 166 | * These uses same IRQ number for request_irq(), and aren't supporting | ||
| 167 | * IRQF_SHARD / IORESOURCE_IRQ_SHAREABLE. | ||
| 168 | * | ||
| 169 | * Actually these are old/new version of USB driver. | ||
| 170 | * This mean its register will be broken if it supports SHARD IRQ, | ||
| 147 | */ | 171 | */ |
| 148 | 172 | ||
| 149 | /* | 173 | /* |
| @@ -185,6 +209,7 @@ | |||
| 185 | * FIXME !! | 209 | * FIXME !! |
| 186 | * | 210 | * |
| 187 | * gpio_no_direction | 211 | * gpio_no_direction |
| 212 | * gpio_pull_down | ||
| 188 | * are quick_hack. | 213 | * are quick_hack. |
| 189 | * | 214 | * |
| 190 | * current gpio frame work doesn't have | 215 | * current gpio frame work doesn't have |
| @@ -196,6 +221,16 @@ static void __init gpio_no_direction(u32 addr) | |||
| 196 | __raw_writeb(0x00, addr); | 221 | __raw_writeb(0x00, addr); |
| 197 | } | 222 | } |
| 198 | 223 | ||
| 224 | static void __init gpio_pull_down(u32 addr) | ||
| 225 | { | ||
| 226 | u8 data = __raw_readb(addr); | ||
| 227 | |||
| 228 | data &= 0x0F; | ||
| 229 | data |= 0xA0; | ||
| 230 | |||
| 231 | __raw_writeb(data, addr); | ||
| 232 | } | ||
| 233 | |||
| 199 | /* MTD */ | 234 | /* MTD */ |
| 200 | static struct mtd_partition nor_flash_partitions[] = { | 235 | static struct mtd_partition nor_flash_partitions[] = { |
| 201 | { | 236 | { |
| @@ -458,12 +493,6 @@ static void __init hdmi_init_pm_clock(void) | |||
| 458 | goto out; | 493 | goto out; |
| 459 | } | 494 | } |
| 460 | 495 | ||
| 461 | ret = clk_enable(&sh7372_pllc2_clk); | ||
| 462 | if (ret < 0) { | ||
| 463 | pr_err("Cannot enable pllc2 clock\n"); | ||
| 464 | goto out; | ||
| 465 | } | ||
| 466 | |||
| 467 | pr_debug("PLLC2 set frequency %lu\n", rate); | 496 | pr_debug("PLLC2 set frequency %lu\n", rate); |
| 468 | 497 | ||
| 469 | ret = clk_set_parent(hdmi_ick, &sh7372_pllc2_clk); | 498 | ret = clk_set_parent(hdmi_ick, &sh7372_pllc2_clk); |
| @@ -515,6 +544,157 @@ static struct platform_device usb1_host_device = { | |||
| 515 | .resource = usb1_host_resources, | 544 | .resource = usb1_host_resources, |
| 516 | }; | 545 | }; |
| 517 | 546 | ||
| 547 | /* USB1 (Function) */ | ||
| 548 | #define USB_PHY_MODE (1 << 4) | ||
| 549 | #define USB_PHY_INT_EN ((1 << 3) | (1 << 2)) | ||
| 550 | #define USB_PHY_ON (1 << 1) | ||
| 551 | #define USB_PHY_OFF (1 << 0) | ||
| 552 | #define USB_PHY_INT_CLR (USB_PHY_ON | USB_PHY_OFF) | ||
| 553 | |||
| 554 | struct usbhs_private { | ||
| 555 | unsigned int irq; | ||
| 556 | unsigned int usbphyaddr; | ||
| 557 | unsigned int usbcrcaddr; | ||
| 558 | struct renesas_usbhs_platform_info info; | ||
| 559 | }; | ||
| 560 | |||
| 561 | #define usbhs_get_priv(pdev) \ | ||
| 562 | container_of(renesas_usbhs_get_info(pdev), \ | ||
| 563 | struct usbhs_private, info) | ||
| 564 | |||
| 565 | #define usbhs_is_connected(priv) \ | ||
| 566 | (!((1 << 7) & __raw_readw(priv->usbcrcaddr))) | ||
| 567 | |||
| 568 | static int usbhs1_get_id(struct platform_device *pdev) | ||
| 569 | { | ||
| 570 | return USBHS_GADGET; | ||
| 571 | } | ||
| 572 | |||
| 573 | static int usbhs1_get_vbus(struct platform_device *pdev) | ||
| 574 | { | ||
| 575 | return usbhs_is_connected(usbhs_get_priv(pdev)); | ||
| 576 | } | ||
| 577 | |||
| 578 | static irqreturn_t usbhs1_interrupt(int irq, void *data) | ||
| 579 | { | ||
| 580 | struct platform_device *pdev = data; | ||
| 581 | struct usbhs_private *priv = usbhs_get_priv(pdev); | ||
| 582 | |||
| 583 | dev_dbg(&pdev->dev, "%s\n", __func__); | ||
| 584 | |||
| 585 | renesas_usbhs_call_notify_hotplug(pdev); | ||
| 586 | |||
| 587 | /* clear status */ | ||
| 588 | __raw_writew(__raw_readw(priv->usbphyaddr) | USB_PHY_INT_CLR, | ||
| 589 | priv->usbphyaddr); | ||
| 590 | |||
| 591 | return IRQ_HANDLED; | ||
| 592 | } | ||
| 593 | |||
| 594 | static int usbhs1_hardware_init(struct platform_device *pdev) | ||
| 595 | { | ||
| 596 | struct usbhs_private *priv = usbhs_get_priv(pdev); | ||
| 597 | int ret; | ||
| 598 | |||
| 599 | irq_set_irq_type(priv->irq, IRQ_TYPE_LEVEL_HIGH); | ||
| 600 | |||
| 601 | /* clear interrupt status */ | ||
| 602 | __raw_writew(USB_PHY_MODE | USB_PHY_INT_CLR, priv->usbphyaddr); | ||
| 603 | |||
| 604 | ret = request_irq(priv->irq, usbhs1_interrupt, 0, | ||
| 605 | dev_name(&pdev->dev), pdev); | ||
| 606 | if (ret) { | ||
| 607 | dev_err(&pdev->dev, "request_irq err\n"); | ||
| 608 | return ret; | ||
| 609 | } | ||
| 610 | |||
| 611 | /* enable USB phy interrupt */ | ||
| 612 | __raw_writew(USB_PHY_MODE | USB_PHY_INT_EN, priv->usbphyaddr); | ||
| 613 | |||
| 614 | return 0; | ||
| 615 | } | ||
| 616 | |||
| 617 | static void usbhs1_hardware_exit(struct platform_device *pdev) | ||
| 618 | { | ||
| 619 | struct usbhs_private *priv = usbhs_get_priv(pdev); | ||
| 620 | |||
| 621 | /* clear interrupt status */ | ||
| 622 | __raw_writew(USB_PHY_MODE | USB_PHY_INT_CLR, priv->usbphyaddr); | ||
| 623 | |||
| 624 | free_irq(priv->irq, pdev); | ||
| 625 | } | ||
| 626 | |||
| 627 | static void usbhs1_phy_reset(struct platform_device *pdev) | ||
| 628 | { | ||
| 629 | struct usbhs_private *priv = usbhs_get_priv(pdev); | ||
| 630 | |||
| 631 | /* init phy */ | ||
| 632 | __raw_writew(0x8a0a, priv->usbcrcaddr); | ||
| 633 | } | ||
| 634 | |||
| 635 | static u32 usbhs1_pipe_cfg[] = { | ||
| 636 | USB_ENDPOINT_XFER_CONTROL, | ||
| 637 | USB_ENDPOINT_XFER_ISOC, | ||
| 638 | USB_ENDPOINT_XFER_ISOC, | ||
| 639 | USB_ENDPOINT_XFER_BULK, | ||
| 640 | USB_ENDPOINT_XFER_BULK, | ||
| 641 | USB_ENDPOINT_XFER_BULK, | ||
| 642 | USB_ENDPOINT_XFER_INT, | ||
| 643 | USB_ENDPOINT_XFER_INT, | ||
| 644 | USB_ENDPOINT_XFER_INT, | ||
| 645 | USB_ENDPOINT_XFER_BULK, | ||
| 646 | USB_ENDPOINT_XFER_BULK, | ||
| 647 | USB_ENDPOINT_XFER_BULK, | ||
| 648 | USB_ENDPOINT_XFER_BULK, | ||
| 649 | USB_ENDPOINT_XFER_BULK, | ||
| 650 | USB_ENDPOINT_XFER_BULK, | ||
| 651 | USB_ENDPOINT_XFER_BULK, | ||
| 652 | }; | ||
| 653 | |||
| 654 | static struct usbhs_private usbhs1_private = { | ||
| 655 | .irq = evt2irq(0x0300), /* IRQ8 */ | ||
| 656 | .usbphyaddr = 0xE60581E2, /* USBPHY1INTAP */ | ||
| 657 | .usbcrcaddr = 0xE6058130, /* USBCR4 */ | ||
| 658 | .info = { | ||
| 659 | .platform_callback = { | ||
| 660 | .hardware_init = usbhs1_hardware_init, | ||
| 661 | .hardware_exit = usbhs1_hardware_exit, | ||
| 662 | .phy_reset = usbhs1_phy_reset, | ||
| 663 | .get_id = usbhs1_get_id, | ||
| 664 | .get_vbus = usbhs1_get_vbus, | ||
| 665 | }, | ||
| 666 | .driver_param = { | ||
| 667 | .buswait_bwait = 4, | ||
| 668 | .pipe_type = usbhs1_pipe_cfg, | ||
| 669 | .pipe_size = ARRAY_SIZE(usbhs1_pipe_cfg), | ||
| 670 | }, | ||
| 671 | }, | ||
| 672 | }; | ||
| 673 | |||
| 674 | static struct resource usbhs1_resources[] = { | ||
| 675 | [0] = { | ||
| 676 | .name = "USBHS", | ||
| 677 | .start = 0xE68B0000, | ||
| 678 | .end = 0xE68B00E6 - 1, | ||
| 679 | .flags = IORESOURCE_MEM, | ||
| 680 | }, | ||
| 681 | [1] = { | ||
| 682 | .start = evt2irq(0x1ce0) /* USB1_USB1I0 */, | ||
| 683 | .flags = IORESOURCE_IRQ, | ||
| 684 | }, | ||
| 685 | }; | ||
| 686 | |||
| 687 | static struct platform_device usbhs1_device = { | ||
| 688 | .name = "renesas_usbhs", | ||
| 689 | .id = 1, | ||
| 690 | .dev = { | ||
| 691 | .platform_data = &usbhs1_private.info, | ||
| 692 | }, | ||
| 693 | .num_resources = ARRAY_SIZE(usbhs1_resources), | ||
| 694 | .resource = usbhs1_resources, | ||
| 695 | }; | ||
| 696 | |||
| 697 | |||
| 518 | /* LED */ | 698 | /* LED */ |
| 519 | static struct gpio_led mackerel_leds[] = { | 699 | static struct gpio_led mackerel_leds[] = { |
| 520 | { | 700 | { |
| @@ -690,7 +870,15 @@ static struct resource sdhi0_resources[] = { | |||
| 690 | .flags = IORESOURCE_MEM, | 870 | .flags = IORESOURCE_MEM, |
| 691 | }, | 871 | }, |
| 692 | [1] = { | 872 | [1] = { |
| 693 | .start = evt2irq(0x0e00) /* SDHI0 */, | 873 | .start = evt2irq(0x0e00) /* SDHI0_SDHI0I0 */, |
| 874 | .flags = IORESOURCE_IRQ, | ||
| 875 | }, | ||
| 876 | [2] = { | ||
| 877 | .start = evt2irq(0x0e20) /* SDHI0_SDHI0I1 */, | ||
| 878 | .flags = IORESOURCE_IRQ, | ||
| 879 | }, | ||
| 880 | [3] = { | ||
| 881 | .start = evt2irq(0x0e40) /* SDHI0_SDHI0I2 */, | ||
| 694 | .flags = IORESOURCE_IRQ, | 882 | .flags = IORESOURCE_IRQ, |
| 695 | }, | 883 | }, |
| 696 | }; | 884 | }; |
| @@ -705,7 +893,7 @@ static struct platform_device sdhi0_device = { | |||
| 705 | }, | 893 | }, |
| 706 | }; | 894 | }; |
| 707 | 895 | ||
| 708 | #if !defined(CONFIG_MMC_SH_MMCIF) | 896 | #if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE) |
| 709 | /* SDHI1 */ | 897 | /* SDHI1 */ |
| 710 | static struct sh_mobile_sdhi_info sdhi1_info = { | 898 | static struct sh_mobile_sdhi_info sdhi1_info = { |
| 711 | .dma_slave_tx = SHDMA_SLAVE_SDHI1_TX, | 899 | .dma_slave_tx = SHDMA_SLAVE_SDHI1_TX, |
| @@ -725,7 +913,15 @@ static struct resource sdhi1_resources[] = { | |||
| 725 | .flags = IORESOURCE_MEM, | 913 | .flags = IORESOURCE_MEM, |
| 726 | }, | 914 | }, |
| 727 | [1] = { | 915 | [1] = { |
| 728 | .start = evt2irq(0x0e80), | 916 | .start = evt2irq(0x0e80), /* SDHI1_SDHI1I0 */ |
| 917 | .flags = IORESOURCE_IRQ, | ||
| 918 | }, | ||
| 919 | [2] = { | ||
| 920 | .start = evt2irq(0x0ea0), /* SDHI1_SDHI1I1 */ | ||
| 921 | .flags = IORESOURCE_IRQ, | ||
| 922 | }, | ||
| 923 | [3] = { | ||
| 924 | .start = evt2irq(0x0ec0), /* SDHI1_SDHI1I2 */ | ||
| 729 | .flags = IORESOURCE_IRQ, | 925 | .flags = IORESOURCE_IRQ, |
| 730 | }, | 926 | }, |
| 731 | }; | 927 | }; |
| @@ -768,7 +964,15 @@ static struct resource sdhi2_resources[] = { | |||
| 768 | .flags = IORESOURCE_MEM, | 964 | .flags = IORESOURCE_MEM, |
| 769 | }, | 965 | }, |
| 770 | [1] = { | 966 | [1] = { |
| 771 | .start = evt2irq(0x1200), | 967 | .start = evt2irq(0x1200), /* SDHI2_SDHI2I0 */ |
| 968 | .flags = IORESOURCE_IRQ, | ||
| 969 | }, | ||
| 970 | [2] = { | ||
| 971 | .start = evt2irq(0x1220), /* SDHI2_SDHI2I1 */ | ||
| 972 | .flags = IORESOURCE_IRQ, | ||
| 973 | }, | ||
| 974 | [3] = { | ||
| 975 | .start = evt2irq(0x1240), /* SDHI2_SDHI2I2 */ | ||
| 772 | .flags = IORESOURCE_IRQ, | 976 | .flags = IORESOURCE_IRQ, |
| 773 | }, | 977 | }, |
| 774 | }; | 978 | }; |
| @@ -803,6 +1007,15 @@ static struct resource sh_mmcif_resources[] = { | |||
| 803 | }, | 1007 | }, |
| 804 | }; | 1008 | }; |
| 805 | 1009 | ||
| 1010 | static struct sh_mmcif_dma sh_mmcif_dma = { | ||
| 1011 | .chan_priv_rx = { | ||
| 1012 | .slave_id = SHDMA_SLAVE_MMCIF_RX, | ||
| 1013 | }, | ||
| 1014 | .chan_priv_tx = { | ||
| 1015 | .slave_id = SHDMA_SLAVE_MMCIF_TX, | ||
| 1016 | }, | ||
| 1017 | }; | ||
| 1018 | |||
| 806 | static struct sh_mmcif_plat_data sh_mmcif_plat = { | 1019 | static struct sh_mmcif_plat_data sh_mmcif_plat = { |
| 807 | .sup_pclk = 0, | 1020 | .sup_pclk = 0, |
| 808 | .ocr = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34, | 1021 | .ocr = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34, |
| @@ -810,6 +1023,7 @@ static struct sh_mmcif_plat_data sh_mmcif_plat = { | |||
| 810 | MMC_CAP_8_BIT_DATA | | 1023 | MMC_CAP_8_BIT_DATA | |
| 811 | MMC_CAP_NEEDS_POLL, | 1024 | MMC_CAP_NEEDS_POLL, |
| 812 | .get_cd = slot_cn7_get_cd, | 1025 | .get_cd = slot_cn7_get_cd, |
| 1026 | .dma = &sh_mmcif_dma, | ||
| 813 | }; | 1027 | }; |
| 814 | 1028 | ||
| 815 | static struct platform_device sh_mmcif_device = { | 1029 | static struct platform_device sh_mmcif_device = { |
| @@ -858,37 +1072,23 @@ static struct soc_camera_link camera_link = { | |||
| 858 | .priv = &camera_info, | 1072 | .priv = &camera_info, |
| 859 | }; | 1073 | }; |
| 860 | 1074 | ||
| 861 | static void dummy_release(struct device *dev) | 1075 | static struct platform_device *camera_device; |
| 1076 | |||
| 1077 | static void mackerel_camera_release(struct device *dev) | ||
| 862 | { | 1078 | { |
| 1079 | soc_camera_platform_release(&camera_device); | ||
| 863 | } | 1080 | } |
| 864 | 1081 | ||
| 865 | static struct platform_device camera_device = { | ||
| 866 | .name = "soc_camera_platform", | ||
| 867 | .dev = { | ||
| 868 | .platform_data = &camera_info, | ||
| 869 | .release = dummy_release, | ||
| 870 | }, | ||
| 871 | }; | ||
| 872 | |||
| 873 | static int mackerel_camera_add(struct soc_camera_link *icl, | 1082 | static int mackerel_camera_add(struct soc_camera_link *icl, |
| 874 | struct device *dev) | 1083 | struct device *dev) |
| 875 | { | 1084 | { |
| 876 | if (icl != &camera_link) | 1085 | return soc_camera_platform_add(icl, dev, &camera_device, &camera_link, |
| 877 | return -ENODEV; | 1086 | mackerel_camera_release, 0); |
| 878 | |||
| 879 | camera_info.dev = dev; | ||
| 880 | |||
| 881 | return platform_device_register(&camera_device); | ||
| 882 | } | 1087 | } |
| 883 | 1088 | ||
| 884 | static void mackerel_camera_del(struct soc_camera_link *icl) | 1089 | static void mackerel_camera_del(struct soc_camera_link *icl) |
| 885 | { | 1090 | { |
| 886 | if (icl != &camera_link) | 1091 | soc_camera_platform_del(icl, camera_device, &camera_link); |
| 887 | return; | ||
| 888 | |||
| 889 | platform_device_unregister(&camera_device); | ||
| 890 | memset(&camera_device.dev.kobj, 0, | ||
| 891 | sizeof(camera_device.dev.kobj)); | ||
| 892 | } | 1092 | } |
| 893 | 1093 | ||
| 894 | static struct sh_mobile_ceu_info sh_mobile_ceu_info = { | 1094 | static struct sh_mobile_ceu_info sh_mobile_ceu_info = { |
| @@ -935,12 +1135,13 @@ static struct platform_device *mackerel_devices[] __initdata = { | |||
| 935 | &smc911x_device, | 1135 | &smc911x_device, |
| 936 | &lcdc_device, | 1136 | &lcdc_device, |
| 937 | &usb1_host_device, | 1137 | &usb1_host_device, |
| 1138 | &usbhs1_device, | ||
| 938 | &leds_device, | 1139 | &leds_device, |
| 939 | &fsi_device, | 1140 | &fsi_device, |
| 940 | &fsi_ak4643_device, | 1141 | &fsi_ak4643_device, |
| 941 | &fsi_hdmi_device, | 1142 | &fsi_hdmi_device, |
| 942 | &sdhi0_device, | 1143 | &sdhi0_device, |
| 943 | #if !defined(CONFIG_MMC_SH_MMCIF) | 1144 | #if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE) |
| 944 | &sdhi1_device, | 1145 | &sdhi1_device, |
| 945 | #endif | 1146 | #endif |
| 946 | &sdhi2_device, | 1147 | &sdhi2_device, |
| @@ -1030,6 +1231,7 @@ static void __init mackerel_map_io(void) | |||
| 1030 | 1231 | ||
| 1031 | #define GPIO_PORT9CR 0xE6051009 | 1232 | #define GPIO_PORT9CR 0xE6051009 |
| 1032 | #define GPIO_PORT10CR 0xE605100A | 1233 | #define GPIO_PORT10CR 0xE605100A |
| 1234 | #define GPIO_PORT168CR 0xE60520A8 | ||
| 1033 | #define SRCR4 0xe61580bc | 1235 | #define SRCR4 0xe61580bc |
| 1034 | #define USCCR1 0xE6058144 | 1236 | #define USCCR1 0xE6058144 |
| 1035 | static void __init mackerel_init(void) | 1237 | static void __init mackerel_init(void) |
| @@ -1088,6 +1290,7 @@ static void __init mackerel_init(void) | |||
| 1088 | gpio_request(GPIO_FN_OVCN_1_114, NULL); | 1290 | gpio_request(GPIO_FN_OVCN_1_114, NULL); |
| 1089 | gpio_request(GPIO_FN_EXTLP_1, NULL); | 1291 | gpio_request(GPIO_FN_EXTLP_1, NULL); |
| 1090 | gpio_request(GPIO_FN_OVCN2_1, NULL); | 1292 | gpio_request(GPIO_FN_OVCN2_1, NULL); |
| 1293 | gpio_pull_down(GPIO_PORT168CR); | ||
| 1091 | 1294 | ||
| 1092 | /* setup USB phy */ | 1295 | /* setup USB phy */ |
| 1093 | __raw_writew(0x8a0a, 0xE6058130); /* USBCR4 */ | 1296 | __raw_writew(0x8a0a, 0xE6058130); /* USBCR4 */ |
| @@ -1140,7 +1343,7 @@ static void __init mackerel_init(void) | |||
| 1140 | gpio_request(GPIO_FN_SDHID0_1, NULL); | 1343 | gpio_request(GPIO_FN_SDHID0_1, NULL); |
| 1141 | gpio_request(GPIO_FN_SDHID0_0, NULL); | 1344 | gpio_request(GPIO_FN_SDHID0_0, NULL); |
| 1142 | 1345 | ||
| 1143 | #if !defined(CONFIG_MMC_SH_MMCIF) | 1346 | #if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE) |
| 1144 | /* enable SDHI1 */ | 1347 | /* enable SDHI1 */ |
| 1145 | gpio_request(GPIO_FN_SDHICMD1, NULL); | 1348 | gpio_request(GPIO_FN_SDHICMD1, NULL); |
| 1146 | gpio_request(GPIO_FN_SDHICLK1, NULL); | 1349 | gpio_request(GPIO_FN_SDHICLK1, NULL); |
| @@ -1216,6 +1419,7 @@ static void __init mackerel_init(void) | |||
| 1216 | platform_add_devices(mackerel_devices, ARRAY_SIZE(mackerel_devices)); | 1419 | platform_add_devices(mackerel_devices, ARRAY_SIZE(mackerel_devices)); |
| 1217 | 1420 | ||
| 1218 | hdmi_init_pm_clock(); | 1421 | hdmi_init_pm_clock(); |
| 1422 | sh7372_pm_init(); | ||
| 1219 | } | 1423 | } |
| 1220 | 1424 | ||
| 1221 | static void __init mackerel_timer_init(void) | 1425 | static void __init mackerel_timer_init(void) |
