diff options
Diffstat (limited to 'arch/arm/mach-shmobile/board-mackerel.c')
| -rw-r--r-- | arch/arm/mach-shmobile/board-mackerel.c | 95 |
1 files changed, 21 insertions, 74 deletions
diff --git a/arch/arm/mach-shmobile/board-mackerel.c b/arch/arm/mach-shmobile/board-mackerel.c index 9b42fbd10f8e..a2813247b455 100644 --- a/arch/arm/mach-shmobile/board-mackerel.c +++ b/arch/arm/mach-shmobile/board-mackerel.c | |||
| @@ -43,7 +43,6 @@ | |||
| 43 | #include <linux/smsc911x.h> | 43 | #include <linux/smsc911x.h> |
| 44 | #include <linux/sh_intc.h> | 44 | #include <linux/sh_intc.h> |
| 45 | #include <linux/tca6416_keypad.h> | 45 | #include <linux/tca6416_keypad.h> |
| 46 | #include <linux/usb/r8a66597.h> | ||
| 47 | #include <linux/usb/renesas_usbhs.h> | 46 | #include <linux/usb/renesas_usbhs.h> |
| 48 | #include <linux/dma-mapping.h> | 47 | #include <linux/dma-mapping.h> |
| 49 | 48 | ||
| @@ -145,11 +144,6 @@ | |||
| 145 | * 1-2 short | VBUS 5V | Host | 144 | * 1-2 short | VBUS 5V | Host |
| 146 | * open | external VBUS | Function | 145 | * open | external VBUS | Function |
| 147 | * | 146 | * |
| 148 | * *1 | ||
| 149 | * CN31 is used as | ||
| 150 | * CONFIG_USB_R8A66597_HCD Host | ||
| 151 | * CONFIG_USB_RENESAS_USBHS Function | ||
| 152 | * | ||
| 153 | * CAUTION | 147 | * CAUTION |
| 154 | * | 148 | * |
| 155 | * renesas_usbhs driver can use external interrupt mode | 149 | * renesas_usbhs driver can use external interrupt mode |
| @@ -161,15 +155,6 @@ | |||
| 161 | * mackerel can not use external interrupt (IRQ7-PORT167) mode on "USB0", | 155 | * mackerel can not use external interrupt (IRQ7-PORT167) mode on "USB0", |
| 162 | * because Touchscreen is using IRQ7-PORT40. | 156 | * because Touchscreen is using IRQ7-PORT40. |
| 163 | * It is impossible to use IRQ7 demux on this board. | 157 | * It is impossible to use IRQ7 demux on this board. |
| 164 | * | ||
| 165 | * We can use external interrupt mode USB-Function on "USB1". | ||
| 166 | * USB1 can become Host by r8a66597, and become Function by renesas_usbhs. | ||
| 167 | * But don't select both drivers in same time. | ||
| 168 | * These uses same IRQ number for request_irq(), and aren't supporting | ||
| 169 | * IRQF_SHARED / IORESOURCE_IRQ_SHAREABLE. | ||
| 170 | * | ||
| 171 | * Actually these are old/new version of USB driver. | ||
| 172 | * This mean its register will be broken if it supports shared IRQ, | ||
| 173 | */ | 158 | */ |
| 174 | 159 | ||
| 175 | /* | 160 | /* |
| @@ -208,6 +193,16 @@ | |||
| 208 | */ | 193 | */ |
| 209 | 194 | ||
| 210 | /* | 195 | /* |
| 196 | * FSI - AK4642 | ||
| 197 | * | ||
| 198 | * it needs amixer settings for playing | ||
| 199 | * | ||
| 200 | * amixer set "Headphone" on | ||
| 201 | * amixer set "HPOUTL Mixer DACH" on | ||
| 202 | * amixer set "HPOUTR Mixer DACH" on | ||
| 203 | */ | ||
| 204 | |||
| 205 | /* | ||
| 211 | * FIXME !! | 206 | * FIXME !! |
| 212 | * | 207 | * |
| 213 | * gpio_no_direction | 208 | * gpio_no_direction |
| @@ -676,51 +671,16 @@ static struct platform_device usbhs0_device = { | |||
| 676 | * Use J30 to select between Host and Function. This setting | 671 | * Use J30 to select between Host and Function. This setting |
| 677 | * can however not be detected by software. Hotplug of USBHS1 | 672 | * can however not be detected by software. Hotplug of USBHS1 |
| 678 | * is provided via IRQ8. | 673 | * is provided via IRQ8. |
| 674 | * | ||
| 675 | * Current USB1 works as "USB Host". | ||
| 676 | * - set J30 "short" | ||
| 677 | * | ||
| 678 | * If you want to use it as "USB gadget", | ||
| 679 | * - J30 "open" | ||
| 680 | * - modify usbhs1_get_id() USBHS_HOST -> USBHS_GADGET | ||
| 681 | * - add .get_vbus = usbhs_get_vbus in usbhs1_private | ||
| 679 | */ | 682 | */ |
| 680 | #define IRQ8 evt2irq(0x0300) | 683 | #define IRQ8 evt2irq(0x0300) |
| 681 | |||
| 682 | /* USBHS1 USB Host support via r8a66597_hcd */ | ||
| 683 | static void usb1_host_port_power(int port, int power) | ||
| 684 | { | ||
| 685 | if (!power) /* only power-on is supported for now */ | ||
| 686 | return; | ||
| 687 | |||
| 688 | /* set VBOUT/PWEN and EXTLP1 in DVSTCTR */ | ||
| 689 | __raw_writew(__raw_readw(0xE68B0008) | 0x600, 0xE68B0008); | ||
| 690 | } | ||
| 691 | |||
| 692 | static struct r8a66597_platdata usb1_host_data = { | ||
| 693 | .on_chip = 1, | ||
| 694 | .port_power = usb1_host_port_power, | ||
| 695 | }; | ||
| 696 | |||
| 697 | static struct resource usb1_host_resources[] = { | ||
| 698 | [0] = { | ||
| 699 | .name = "USBHS1", | ||
| 700 | .start = 0xe68b0000, | ||
| 701 | .end = 0xe68b00e6 - 1, | ||
| 702 | .flags = IORESOURCE_MEM, | ||
| 703 | }, | ||
| 704 | [1] = { | ||
| 705 | .start = evt2irq(0x1ce0) /* USB1_USB1I0 */, | ||
| 706 | .flags = IORESOURCE_IRQ, | ||
| 707 | }, | ||
| 708 | }; | ||
| 709 | |||
| 710 | static struct platform_device usb1_host_device = { | ||
| 711 | .name = "r8a66597_hcd", | ||
| 712 | .id = 1, | ||
| 713 | .dev = { | ||
| 714 | .dma_mask = NULL, /* not use dma */ | ||
| 715 | .coherent_dma_mask = 0xffffffff, | ||
| 716 | .platform_data = &usb1_host_data, | ||
| 717 | }, | ||
| 718 | .num_resources = ARRAY_SIZE(usb1_host_resources), | ||
| 719 | .resource = usb1_host_resources, | ||
| 720 | }; | ||
| 721 | |||
| 722 | /* USBHS1 USB Function support via renesas_usbhs */ | ||
| 723 | |||
| 724 | #define USB_PHY_MODE (1 << 4) | 684 | #define USB_PHY_MODE (1 << 4) |
| 725 | #define USB_PHY_INT_EN ((1 << 3) | (1 << 2)) | 685 | #define USB_PHY_INT_EN ((1 << 3) | (1 << 2)) |
| 726 | #define USB_PHY_ON (1 << 1) | 686 | #define USB_PHY_ON (1 << 1) |
| @@ -776,7 +736,7 @@ static void usbhs1_hardware_exit(struct platform_device *pdev) | |||
| 776 | 736 | ||
| 777 | static int usbhs1_get_id(struct platform_device *pdev) | 737 | static int usbhs1_get_id(struct platform_device *pdev) |
| 778 | { | 738 | { |
| 779 | return USBHS_GADGET; | 739 | return USBHS_HOST; |
| 780 | } | 740 | } |
| 781 | 741 | ||
| 782 | static u32 usbhs1_pipe_cfg[] = { | 742 | static u32 usbhs1_pipe_cfg[] = { |
| @@ -807,7 +767,6 @@ static struct usbhs_private usbhs1_private = { | |||
| 807 | .hardware_exit = usbhs1_hardware_exit, | 767 | .hardware_exit = usbhs1_hardware_exit, |
| 808 | .get_id = usbhs1_get_id, | 768 | .get_id = usbhs1_get_id, |
| 809 | .phy_reset = usbhs_phy_reset, | 769 | .phy_reset = usbhs_phy_reset, |
| 810 | .get_vbus = usbhs_get_vbus, | ||
| 811 | }, | 770 | }, |
| 812 | .driver_param = { | 771 | .driver_param = { |
| 813 | .buswait_bwait = 4, | 772 | .buswait_bwait = 4, |
| @@ -1184,15 +1143,6 @@ static struct resource sh_mmcif_resources[] = { | |||
| 1184 | }, | 1143 | }, |
| 1185 | }; | 1144 | }; |
| 1186 | 1145 | ||
| 1187 | static struct sh_mmcif_dma sh_mmcif_dma = { | ||
| 1188 | .chan_priv_rx = { | ||
| 1189 | .slave_id = SHDMA_SLAVE_MMCIF_RX, | ||
| 1190 | }, | ||
| 1191 | .chan_priv_tx = { | ||
| 1192 | .slave_id = SHDMA_SLAVE_MMCIF_TX, | ||
| 1193 | }, | ||
| 1194 | }; | ||
| 1195 | |||
| 1196 | static struct sh_mmcif_plat_data sh_mmcif_plat = { | 1146 | static struct sh_mmcif_plat_data sh_mmcif_plat = { |
| 1197 | .sup_pclk = 0, | 1147 | .sup_pclk = 0, |
| 1198 | .ocr = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34, | 1148 | .ocr = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34, |
| @@ -1200,7 +1150,8 @@ static struct sh_mmcif_plat_data sh_mmcif_plat = { | |||
| 1200 | MMC_CAP_8_BIT_DATA | | 1150 | MMC_CAP_8_BIT_DATA | |
| 1201 | MMC_CAP_NEEDS_POLL, | 1151 | MMC_CAP_NEEDS_POLL, |
| 1202 | .get_cd = slot_cn7_get_cd, | 1152 | .get_cd = slot_cn7_get_cd, |
| 1203 | .dma = &sh_mmcif_dma, | 1153 | .slave_id_tx = SHDMA_SLAVE_MMCIF_TX, |
| 1154 | .slave_id_rx = SHDMA_SLAVE_MMCIF_RX, | ||
| 1204 | }; | 1155 | }; |
| 1205 | 1156 | ||
| 1206 | static struct platform_device sh_mmcif_device = { | 1157 | static struct platform_device sh_mmcif_device = { |
| @@ -1311,7 +1262,6 @@ static struct platform_device *mackerel_devices[] __initdata = { | |||
| 1311 | &nor_flash_device, | 1262 | &nor_flash_device, |
| 1312 | &smc911x_device, | 1263 | &smc911x_device, |
| 1313 | &lcdc_device, | 1264 | &lcdc_device, |
| 1314 | &usb1_host_device, | ||
| 1315 | &usbhs1_device, | 1265 | &usbhs1_device, |
| 1316 | &usbhs0_device, | 1266 | &usbhs0_device, |
| 1317 | &leds_device, | 1267 | &leds_device, |
| @@ -1473,9 +1423,6 @@ static void __init mackerel_init(void) | |||
| 1473 | gpio_pull_down(GPIO_PORT167CR); /* VBUS0_1 pull down */ | 1423 | gpio_pull_down(GPIO_PORT167CR); /* VBUS0_1 pull down */ |
| 1474 | gpio_request(GPIO_FN_IDIN_1_113, NULL); | 1424 | gpio_request(GPIO_FN_IDIN_1_113, NULL); |
| 1475 | 1425 | ||
| 1476 | /* USB phy tweak to make the r8a66597_hcd host driver work */ | ||
| 1477 | __raw_writew(0x8a0a, 0xe6058130); /* USBCR4 */ | ||
| 1478 | |||
| 1479 | /* enable FSI2 port A (ak4643) */ | 1426 | /* enable FSI2 port A (ak4643) */ |
| 1480 | gpio_request(GPIO_FN_FSIAIBT, NULL); | 1427 | gpio_request(GPIO_FN_FSIAIBT, NULL); |
| 1481 | gpio_request(GPIO_FN_FSIAILR, NULL); | 1428 | gpio_request(GPIO_FN_FSIAILR, NULL); |
