Message ID | 1344411661-17821-5-git-send-email-p.paneri@samsung.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Praveen, > -----Original Message----- > From: linux-usb-owner@vger.kernel.org [mailto:linux-usb- > owner@vger.kernel.org] On Behalf Of Praveen Paneri > Sent: Wednesday, August 08, 2012 4:41 PM > To: linux-usb@vger.kernel.org > Cc: devicetree-discuss@lists.ozlabs.org; linux-arm- > kernel@lists.infradead.org; linux-samsung-soc@vger.kernel.org; > kgene.kim@samsung.com; balbi@ti.com; gregkh@linuxfoundation.org; > thomas.abraham@linaro.org; ben-linux@fluff.org; > broonie@opensource.wolfsonmicro.com; l.majewski@samsung.com; > kyungmin.park@samsung.com; grant.likely@secretlab.ca; heiko@sntech.de > Subject: [PATCH v3 4/5] ARM: S3C64XX: Enabling samsung-usbphy driver > > Adding platform device for samsung-usbphy driver. Enabling it for > s3c64xx based machines using s3c-hsotg. > > Signed-off-by: Praveen Paneri <p.paneri@samsung.com> > --- > arch/arm/mach-s3c64xx/include/mach/map.h | 2 + > arch/arm/mach-s3c64xx/mach-crag6410.c | 4 +++ > arch/arm/mach-s3c64xx/mach-smartq.c | 5 ++++ > arch/arm/mach-s3c64xx/mach-smdk6410.c | 4 +++ > arch/arm/mach-s3c64xx/setup-usb-phy.c | 14 +++++++++++ > arch/arm/plat-samsung/devs.c | 33 ++++++++++++++++++++++++++ > arch/arm/plat-samsung/include/plat/devs.h | 1 + > arch/arm/plat-samsung/include/plat/usb-phy.h | 1 + > 8 files changed, 64 insertions(+), 0 deletions(-) > > diff --git a/arch/arm/mach-s3c64xx/include/mach/map.h b/arch/arm/mach- > s3c64xx/include/mach/map.h > index 8e2097b..dc482bb 100644 > --- a/arch/arm/mach-s3c64xx/include/mach/map.h > +++ b/arch/arm/mach-s3c64xx/include/mach/map.h > @@ -65,6 +65,7 @@ > > #define S3C64XX_PA_NAND (0x70200000) > #define S3C64XX_PA_FB (0x77100000) > +#define S3C64XX_PA_USB_HSPHY (0x7C100000) > #define S3C64XX_PA_USB_HSOTG (0x7C000000) > #define S3C64XX_PA_WATCHDOG (0x7E004000) > #define S3C64XX_PA_RTC (0x7E005000) > @@ -113,6 +114,7 @@ > #define S3C_PA_FB S3C64XX_PA_FB > #define S3C_PA_USBHOST S3C64XX_PA_USBHOST > #define S3C_PA_USB_HSOTG S3C64XX_PA_USB_HSOTG > +#define S3C_PA_USB_PHY S3C64XX_PA_USB_HSPHY > #define S3C_PA_RTC S3C64XX_PA_RTC > #define S3C_PA_WDT S3C64XX_PA_WATCHDOG > #define S3C_PA_SPI0 S3C64XX_PA_SPI0 > diff --git a/arch/arm/mach-s3c64xx/mach-crag6410.c b/arch/arm/mach- > s3c64xx/mach-crag6410.c > index b0f5baf..fa02e2f 100644 > --- a/arch/arm/mach-s3c64xx/mach-crag6410.c > +++ b/arch/arm/mach-s3c64xx/mach-crag6410.c > @@ -31,6 +31,7 @@ > #include <linux/spi/spi.h> > > #include <linux/i2c/pca953x.h> > +#include <linux/platform_data/samsung-usbphy.h> > > #include <video/platform_lcd.h> > > @@ -336,6 +337,7 @@ static struct platform_device wallvdd_device = { > }; > > static struct platform_device *crag6410_devices[] __initdata = { > + &samsung_device_usbphy, > &s3c_device_hsmmc0, > &s3c_device_hsmmc2, > &s3c_device_i2c0, > @@ -765,6 +767,7 @@ static const struct gpio_led_platform_data > gpio_leds_pdata = { > .num_leds = ARRAY_SIZE(gpio_leds), > }; > > +static struct samsung_usbphy_data crag6410_usbphy_pdata; Why don't you use __initdata for this structure? It will be duplicated in s3c_set_platdata() and we don't need it in memory after booting. I think you can even initialize it here (with s5p_usb_phy_pmu_isolation). > > static void __init crag6410_machine_init(void) > { > @@ -790,6 +793,7 @@ static void __init crag6410_machine_init(void) > s3c_i2c0_set_platdata(&i2c0_pdata); > s3c_i2c1_set_platdata(&i2c1_pdata); > s3c_fb_set_platdata(&crag6410_lcd_pdata); > + samsung_usbphy_set_pdata(&crag6410_usbphy_pdata); > > i2c_register_board_info(0, i2c_devs0, ARRAY_SIZE(i2c_devs0)); > i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1)); > diff --git a/arch/arm/mach-s3c64xx/mach-smartq.c b/arch/arm/mach- > s3c64xx/mach-smartq.c > index 7400da1..e0c4df8 100644 > --- a/arch/arm/mach-s3c64xx/mach-smartq.c > +++ b/arch/arm/mach-s3c64xx/mach-smartq.c > @@ -18,6 +18,7 @@ > #include <linux/serial_core.h> > #include <linux/spi/spi_gpio.h> > #include <linux/usb/gpio_vbus.h> > +#include <linux/platform_data/samsung-usbphy.h> > > #include <asm/mach-types.h> > #include <asm/mach/map.h> > @@ -234,6 +235,7 @@ static struct i2c_board_info smartq_i2c_devs[] > __initdata = { > }; > > static struct platform_device *smartq_devices[] __initdata = { > + &samsung_device_usbphy, > &s3c_device_hsmmc1, /* Init iNAND first, ... */ > &s3c_device_hsmmc0, /* ... then the external SD card */ > &s3c_device_hsmmc2, > @@ -380,9 +382,12 @@ void __init smartq_map_io(void) > smartq_lcd_mode_set(); > } > > +static struct samsung_usbphy_data smartq_usbphy_pdata; Same here > + > void __init smartq_machine_init(void) > { > s3c_i2c0_set_platdata(NULL); > + samsung_usbphy_set_pdata(&smartq_usbphy_pdata); > s3c_hwmon_set_platdata(&smartq_hwmon_pdata); > s3c_sdhci1_set_platdata(&smartq_internal_hsmmc_pdata); > s3c_sdhci2_set_platdata(&smartq_internal_hsmmc_pdata); > diff --git a/arch/arm/mach-s3c64xx/mach-smdk6410.c b/arch/arm/mach- > s3c64xx/mach-smdk6410.c > index cbdc91b..8d40511 100644 > --- a/arch/arm/mach-s3c64xx/mach-smdk6410.c > +++ b/arch/arm/mach-s3c64xx/mach-smdk6410.c > @@ -30,6 +30,7 @@ > #include <linux/regulator/fixed.h> > #include <linux/regulator/machine.h> > #include <linux/pwm_backlight.h> > +#include <linux/platform_data/samsung-usbphy.h> > > #ifdef CONFIG_SMDK6410_WM1190_EV1 > #include <linux/mfd/wm8350/core.h> > @@ -263,6 +264,7 @@ static struct samsung_keypad_platdata > smdk6410_keypad_data __initdata = { > static struct map_desc smdk6410_iodesc[] = {}; > > static struct platform_device *smdk6410_devices[] __initdata = { > + &samsung_device_usbphy, > #ifdef CONFIG_SMDK6410_SD_CH0 > &s3c_device_hsmmc0, > #endif > @@ -626,6 +628,7 @@ static struct platform_pwm_backlight_data > smdk6410_bl_data = { > .pwm_id = 1, > }; > > +static struct samsung_usbphy_data smdk6410_usbphy_pdata; Same here > > static void __init smdk6410_map_io(void) > { > @@ -655,6 +658,7 @@ static void __init smdk6410_machine_init(void) > s3c_i2c0_set_platdata(NULL); > s3c_i2c1_set_platdata(NULL); > s3c_fb_set_platdata(&smdk6410_lcd_pdata); > + samsung_usbphy_set_pdata(&smdk6410_usbphy_pdata); > > samsung_keypad_set_platdata(&smdk6410_keypad_data); > > diff --git a/arch/arm/mach-s3c64xx/setup-usb-phy.c b/arch/arm/mach- > s3c64xx/setup-usb-phy.c > index 7a09553..3aee778 100644 > --- a/arch/arm/mach-s3c64xx/setup-usb-phy.c > +++ b/arch/arm/mach-s3c64xx/setup-usb-phy.c > @@ -9,3 +9,17 @@ > * > */ > > +#include <linux/io.h> > +#include <mach/map.h> > +#include <mach/regs-sys.h> > + > +void s5p_usb_phy_pmu_isolation(int on) > +{ > + if (on) { > + writel(readl(S3C64XX_OTHERS) & ~S3C64XX_OTHERS_USBMASK, > + S3C64XX_OTHERS); > + } else { > + writel(readl(S3C64XX_OTHERS) | S3C64XX_OTHERS_USBMASK, > + S3C64XX_OTHERS); > + } > +} > diff --git a/arch/arm/plat-samsung/devs.c b/arch/arm/plat-samsung/devs.c > index 74e31ce..a094143 100644 > --- a/arch/arm/plat-samsung/devs.c > +++ b/arch/arm/plat-samsung/devs.c > @@ -31,6 +31,7 @@ > #include <linux/ioport.h> > #include <linux/platform_data/s3c-hsudc.h> > #include <linux/platform_data/s3c-hsotg.h> > +#include <linux/platform_data/samsung-usbphy.h> > > #include <asm/irq.h> > #include <asm/pmu.h> > @@ -1343,6 +1344,35 @@ struct platform_device s5p_device_mixer = { > > /* USB */ > > +#ifdef CONFIG_S3C_DEV_USB_HSOTG > +/* USB PHY*/ > +static struct resource samsung_usbphy_resource[] = { > + [0] = { > + .start = S3C_PA_USB_PHY, > + .end = S3C_PA_USB_PHY + SZ_16 - 1, > + .flags = IORESOURCE_MEM, > + }, > +}; > + > +struct platform_device samsung_device_usbphy = { > + .name = "s3c64xx-usbphy", > + .id = -1, > + .num_resources = ARRAY_SIZE(samsung_usbphy_resource), > + .resource = samsung_usbphy_resource, > +}; > + > +void __init samsung_usbphy_set_pdata(struct samsung_usbphy_data *pd) > +{ > + struct samsung_usbphy_data *npd; > + > + npd = s3c_set_platdata(pd, sizeof(struct samsung_usbphy_data), > + &samsung_device_usbphy); > + > + if (!npd->pmu_isolation) > + npd->pmu_isolation = s5p_usb_phy_pmu_isolation; > +} > +#endif > + > #ifdef CONFIG_S3C_DEV_USB_HOST > static struct resource s3c_usb_resource[] = { > [0] = DEFINE_RES_MEM(S3C_PA_USBHOST, SZ_256), > @@ -1449,6 +1479,8 @@ struct platform_device s3c_device_usb_hsotg = { > }, > }; > > +#ifndef CONFIG_ARCH_S3C64XX > +/* TODO: To be removed later. Currently only S3C64XX is platform data > free */ > void __init s3c_hsotg_set_platdata(struct s3c_hsotg_plat *pd) > { > struct s3c_hsotg_plat *npd; > @@ -1461,6 +1493,7 @@ void __init s3c_hsotg_set_platdata(struct > s3c_hsotg_plat *pd) > if (!npd->phy_exit) > npd->phy_exit = s5p_usb_phy_exit; > } > +#endif > #endif /* CONFIG_S3C_DEV_USB_HSOTG */ > > /* USB High Spped 2.0 Device (Gadget) */ > diff --git a/arch/arm/plat-samsung/include/plat/devs.h b/arch/arm/plat- > samsung/include/plat/devs.h > index 5da4b4f..3849c88 100644 > --- a/arch/arm/plat-samsung/include/plat/devs.h > +++ b/arch/arm/plat-samsung/include/plat/devs.h > @@ -138,6 +138,7 @@ extern struct platform_device exynos_device_drm; > extern struct platform_device samsung_asoc_dma; > extern struct platform_device samsung_asoc_idma; > extern struct platform_device samsung_device_keypad; > +extern struct platform_device samsung_device_usbphy; > > /* s3c2440 specific devices */ > > diff --git a/arch/arm/plat-samsung/include/plat/usb-phy.h b/arch/arm/plat- > samsung/include/plat/usb-phy.h > index 959bcdb..165ffe7 100644 > --- a/arch/arm/plat-samsung/include/plat/usb-phy.h > +++ b/arch/arm/plat-samsung/include/plat/usb-phy.h > @@ -18,5 +18,6 @@ enum s5p_usb_phy_type { > > extern int s5p_usb_phy_init(struct platform_device *pdev, int type); > extern int s5p_usb_phy_exit(struct platform_device *pdev, int type); > +extern void s5p_usb_phy_pmu_isolation(int on); > > #endif /* __PLAT_SAMSUNG_USB_PHY_H */ > -- > 1.7.1 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-usb" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html
On Fri, Aug 10, 2012 at 12:24 PM, Anton Tikhomirov <av.tikhomirov@samsung.com> wrote: > Hi Praveen, > >> -----Original Message----- >> From: linux-usb-owner@vger.kernel.org [mailto:linux-usb- >> owner@vger.kernel.org] On Behalf Of Praveen Paneri >> Sent: Wednesday, August 08, 2012 4:41 PM >> To: linux-usb@vger.kernel.org >> Cc: devicetree-discuss@lists.ozlabs.org; linux-arm- >> kernel@lists.infradead.org; linux-samsung-soc@vger.kernel.org; >> kgene.kim@samsung.com; balbi@ti.com; gregkh@linuxfoundation.org; >> thomas.abraham@linaro.org; ben-linux@fluff.org; >> broonie@opensource.wolfsonmicro.com; l.majewski@samsung.com; >> kyungmin.park@samsung.com; grant.likely@secretlab.ca; heiko@sntech.de >> Subject: [PATCH v3 4/5] ARM: S3C64XX: Enabling samsung-usbphy driver >> >> Adding platform device for samsung-usbphy driver. Enabling it for >> s3c64xx based machines using s3c-hsotg. >> >> Signed-off-by: Praveen Paneri <p.paneri@samsung.com> >> --- >> arch/arm/mach-s3c64xx/include/mach/map.h | 2 + >> arch/arm/mach-s3c64xx/mach-crag6410.c | 4 +++ >> arch/arm/mach-s3c64xx/mach-smartq.c | 5 ++++ >> arch/arm/mach-s3c64xx/mach-smdk6410.c | 4 +++ >> arch/arm/mach-s3c64xx/setup-usb-phy.c | 14 +++++++++++ >> arch/arm/plat-samsung/devs.c | 33 > ++++++++++++++++++++++++++ >> arch/arm/plat-samsung/include/plat/devs.h | 1 + >> arch/arm/plat-samsung/include/plat/usb-phy.h | 1 + >> 8 files changed, 64 insertions(+), 0 deletions(-) >> >> diff --git a/arch/arm/mach-s3c64xx/include/mach/map.h b/arch/arm/mach- >> s3c64xx/include/mach/map.h >> index 8e2097b..dc482bb 100644 >> --- a/arch/arm/mach-s3c64xx/include/mach/map.h >> +++ b/arch/arm/mach-s3c64xx/include/mach/map.h >> @@ -65,6 +65,7 @@ >> >> #define S3C64XX_PA_NAND (0x70200000) >> #define S3C64XX_PA_FB (0x77100000) >> +#define S3C64XX_PA_USB_HSPHY (0x7C100000) >> #define S3C64XX_PA_USB_HSOTG (0x7C000000) >> #define S3C64XX_PA_WATCHDOG (0x7E004000) >> #define S3C64XX_PA_RTC (0x7E005000) >> @@ -113,6 +114,7 @@ >> #define S3C_PA_FB S3C64XX_PA_FB >> #define S3C_PA_USBHOST S3C64XX_PA_USBHOST >> #define S3C_PA_USB_HSOTG S3C64XX_PA_USB_HSOTG >> +#define S3C_PA_USB_PHY S3C64XX_PA_USB_HSPHY >> #define S3C_PA_RTC S3C64XX_PA_RTC >> #define S3C_PA_WDT S3C64XX_PA_WATCHDOG >> #define S3C_PA_SPI0 S3C64XX_PA_SPI0 >> diff --git a/arch/arm/mach-s3c64xx/mach-crag6410.c b/arch/arm/mach- >> s3c64xx/mach-crag6410.c >> index b0f5baf..fa02e2f 100644 >> --- a/arch/arm/mach-s3c64xx/mach-crag6410.c >> +++ b/arch/arm/mach-s3c64xx/mach-crag6410.c >> @@ -31,6 +31,7 @@ >> #include <linux/spi/spi.h> >> >> #include <linux/i2c/pca953x.h> >> +#include <linux/platform_data/samsung-usbphy.h> >> >> #include <video/platform_lcd.h> >> >> @@ -336,6 +337,7 @@ static struct platform_device wallvdd_device = { >> }; >> >> static struct platform_device *crag6410_devices[] __initdata = { >> + &samsung_device_usbphy, >> &s3c_device_hsmmc0, >> &s3c_device_hsmmc2, >> &s3c_device_i2c0, >> @@ -765,6 +767,7 @@ static const struct gpio_led_platform_data >> gpio_leds_pdata = { >> .num_leds = ARRAY_SIZE(gpio_leds), >> }; >> >> +static struct samsung_usbphy_data crag6410_usbphy_pdata; > > Why don't you use __initdata for this structure? It will be duplicated > in s3c_set_platdata() and we don't need it in memory after booting. > I think you can even initialize it here (with s5p_usb_phy_pmu_isolation). Thanks! will change it. Praveen > >> >> static void __init crag6410_machine_init(void) >> { >> @@ -790,6 +793,7 @@ static void __init crag6410_machine_init(void) >> s3c_i2c0_set_platdata(&i2c0_pdata); >> s3c_i2c1_set_platdata(&i2c1_pdata); >> s3c_fb_set_platdata(&crag6410_lcd_pdata); >> + samsung_usbphy_set_pdata(&crag6410_usbphy_pdata); >> >> i2c_register_board_info(0, i2c_devs0, ARRAY_SIZE(i2c_devs0)); >> i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1)); >> diff --git a/arch/arm/mach-s3c64xx/mach-smartq.c b/arch/arm/mach- >> s3c64xx/mach-smartq.c >> index 7400da1..e0c4df8 100644 >> --- a/arch/arm/mach-s3c64xx/mach-smartq.c >> +++ b/arch/arm/mach-s3c64xx/mach-smartq.c >> @@ -18,6 +18,7 @@ >> #include <linux/serial_core.h> >> #include <linux/spi/spi_gpio.h> >> #include <linux/usb/gpio_vbus.h> >> +#include <linux/platform_data/samsung-usbphy.h> >> >> #include <asm/mach-types.h> >> #include <asm/mach/map.h> >> @@ -234,6 +235,7 @@ static struct i2c_board_info smartq_i2c_devs[] >> __initdata = { >> }; >> >> static struct platform_device *smartq_devices[] __initdata = { >> + &samsung_device_usbphy, >> &s3c_device_hsmmc1, /* Init iNAND first, ... */ >> &s3c_device_hsmmc0, /* ... then the external SD card */ >> &s3c_device_hsmmc2, >> @@ -380,9 +382,12 @@ void __init smartq_map_io(void) >> smartq_lcd_mode_set(); >> } >> >> +static struct samsung_usbphy_data smartq_usbphy_pdata; > > Same here > >> + >> void __init smartq_machine_init(void) >> { >> s3c_i2c0_set_platdata(NULL); >> + samsung_usbphy_set_pdata(&smartq_usbphy_pdata); >> s3c_hwmon_set_platdata(&smartq_hwmon_pdata); >> s3c_sdhci1_set_platdata(&smartq_internal_hsmmc_pdata); >> s3c_sdhci2_set_platdata(&smartq_internal_hsmmc_pdata); >> diff --git a/arch/arm/mach-s3c64xx/mach-smdk6410.c b/arch/arm/mach- >> s3c64xx/mach-smdk6410.c >> index cbdc91b..8d40511 100644 >> --- a/arch/arm/mach-s3c64xx/mach-smdk6410.c >> +++ b/arch/arm/mach-s3c64xx/mach-smdk6410.c >> @@ -30,6 +30,7 @@ >> #include <linux/regulator/fixed.h> >> #include <linux/regulator/machine.h> >> #include <linux/pwm_backlight.h> >> +#include <linux/platform_data/samsung-usbphy.h> >> >> #ifdef CONFIG_SMDK6410_WM1190_EV1 >> #include <linux/mfd/wm8350/core.h> >> @@ -263,6 +264,7 @@ static struct samsung_keypad_platdata >> smdk6410_keypad_data __initdata = { >> static struct map_desc smdk6410_iodesc[] = {}; >> >> static struct platform_device *smdk6410_devices[] __initdata = { >> + &samsung_device_usbphy, >> #ifdef CONFIG_SMDK6410_SD_CH0 >> &s3c_device_hsmmc0, >> #endif >> @@ -626,6 +628,7 @@ static struct platform_pwm_backlight_data >> smdk6410_bl_data = { >> .pwm_id = 1, >> }; >> >> +static struct samsung_usbphy_data smdk6410_usbphy_pdata; > > Same here > >> >> static void __init smdk6410_map_io(void) >> { >> @@ -655,6 +658,7 @@ static void __init smdk6410_machine_init(void) >> s3c_i2c0_set_platdata(NULL); >> s3c_i2c1_set_platdata(NULL); >> s3c_fb_set_platdata(&smdk6410_lcd_pdata); >> + samsung_usbphy_set_pdata(&smdk6410_usbphy_pdata); >> >> samsung_keypad_set_platdata(&smdk6410_keypad_data); >> >> diff --git a/arch/arm/mach-s3c64xx/setup-usb-phy.c b/arch/arm/mach- >> s3c64xx/setup-usb-phy.c >> index 7a09553..3aee778 100644 >> --- a/arch/arm/mach-s3c64xx/setup-usb-phy.c >> +++ b/arch/arm/mach-s3c64xx/setup-usb-phy.c >> @@ -9,3 +9,17 @@ >> * >> */ >> >> +#include <linux/io.h> >> +#include <mach/map.h> >> +#include <mach/regs-sys.h> >> + >> +void s5p_usb_phy_pmu_isolation(int on) >> +{ >> + if (on) { >> + writel(readl(S3C64XX_OTHERS) & ~S3C64XX_OTHERS_USBMASK, >> + S3C64XX_OTHERS); >> + } else { >> + writel(readl(S3C64XX_OTHERS) | S3C64XX_OTHERS_USBMASK, >> + S3C64XX_OTHERS); >> + } >> +} >> diff --git a/arch/arm/plat-samsung/devs.c b/arch/arm/plat-samsung/devs.c >> index 74e31ce..a094143 100644 >> --- a/arch/arm/plat-samsung/devs.c >> +++ b/arch/arm/plat-samsung/devs.c >> @@ -31,6 +31,7 @@ >> #include <linux/ioport.h> >> #include <linux/platform_data/s3c-hsudc.h> >> #include <linux/platform_data/s3c-hsotg.h> >> +#include <linux/platform_data/samsung-usbphy.h> >> >> #include <asm/irq.h> >> #include <asm/pmu.h> >> @@ -1343,6 +1344,35 @@ struct platform_device s5p_device_mixer = { >> >> /* USB */ >> >> +#ifdef CONFIG_S3C_DEV_USB_HSOTG >> +/* USB PHY*/ >> +static struct resource samsung_usbphy_resource[] = { >> + [0] = { >> + .start = S3C_PA_USB_PHY, >> + .end = S3C_PA_USB_PHY + SZ_16 - 1, >> + .flags = IORESOURCE_MEM, >> + }, >> +}; >> + >> +struct platform_device samsung_device_usbphy = { >> + .name = "s3c64xx-usbphy", >> + .id = -1, >> + .num_resources = ARRAY_SIZE(samsung_usbphy_resource), >> + .resource = samsung_usbphy_resource, >> +}; >> + >> +void __init samsung_usbphy_set_pdata(struct samsung_usbphy_data *pd) >> +{ >> + struct samsung_usbphy_data *npd; >> + >> + npd = s3c_set_platdata(pd, sizeof(struct samsung_usbphy_data), >> + &samsung_device_usbphy); >> + >> + if (!npd->pmu_isolation) >> + npd->pmu_isolation = s5p_usb_phy_pmu_isolation; >> +} >> +#endif >> + >> #ifdef CONFIG_S3C_DEV_USB_HOST >> static struct resource s3c_usb_resource[] = { >> [0] = DEFINE_RES_MEM(S3C_PA_USBHOST, SZ_256), >> @@ -1449,6 +1479,8 @@ struct platform_device s3c_device_usb_hsotg = { >> }, >> }; >> >> +#ifndef CONFIG_ARCH_S3C64XX >> +/* TODO: To be removed later. Currently only S3C64XX is platform data >> free */ >> void __init s3c_hsotg_set_platdata(struct s3c_hsotg_plat *pd) >> { >> struct s3c_hsotg_plat *npd; >> @@ -1461,6 +1493,7 @@ void __init s3c_hsotg_set_platdata(struct >> s3c_hsotg_plat *pd) >> if (!npd->phy_exit) >> npd->phy_exit = s5p_usb_phy_exit; >> } >> +#endif >> #endif /* CONFIG_S3C_DEV_USB_HSOTG */ >> >> /* USB High Spped 2.0 Device (Gadget) */ >> diff --git a/arch/arm/plat-samsung/include/plat/devs.h b/arch/arm/plat- >> samsung/include/plat/devs.h >> index 5da4b4f..3849c88 100644 >> --- a/arch/arm/plat-samsung/include/plat/devs.h >> +++ b/arch/arm/plat-samsung/include/plat/devs.h >> @@ -138,6 +138,7 @@ extern struct platform_device exynos_device_drm; >> extern struct platform_device samsung_asoc_dma; >> extern struct platform_device samsung_asoc_idma; >> extern struct platform_device samsung_device_keypad; >> +extern struct platform_device samsung_device_usbphy; >> >> /* s3c2440 specific devices */ >> >> diff --git a/arch/arm/plat-samsung/include/plat/usb-phy.h b/arch/arm/plat- >> samsung/include/plat/usb-phy.h >> index 959bcdb..165ffe7 100644 >> --- a/arch/arm/plat-samsung/include/plat/usb-phy.h >> +++ b/arch/arm/plat-samsung/include/plat/usb-phy.h >> @@ -18,5 +18,6 @@ enum s5p_usb_phy_type { >> >> extern int s5p_usb_phy_init(struct platform_device *pdev, int type); >> extern int s5p_usb_phy_exit(struct platform_device *pdev, int type); >> +extern void s5p_usb_phy_pmu_isolation(int on); >> >> #endif /* __PLAT_SAMSUNG_USB_PHY_H */ >> -- >> 1.7.1 >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-usb" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html > > -- > To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/arch/arm/mach-s3c64xx/include/mach/map.h b/arch/arm/mach-s3c64xx/include/mach/map.h index 8e2097b..dc482bb 100644 --- a/arch/arm/mach-s3c64xx/include/mach/map.h +++ b/arch/arm/mach-s3c64xx/include/mach/map.h @@ -65,6 +65,7 @@ #define S3C64XX_PA_NAND (0x70200000) #define S3C64XX_PA_FB (0x77100000) +#define S3C64XX_PA_USB_HSPHY (0x7C100000) #define S3C64XX_PA_USB_HSOTG (0x7C000000) #define S3C64XX_PA_WATCHDOG (0x7E004000) #define S3C64XX_PA_RTC (0x7E005000) @@ -113,6 +114,7 @@ #define S3C_PA_FB S3C64XX_PA_FB #define S3C_PA_USBHOST S3C64XX_PA_USBHOST #define S3C_PA_USB_HSOTG S3C64XX_PA_USB_HSOTG +#define S3C_PA_USB_PHY S3C64XX_PA_USB_HSPHY #define S3C_PA_RTC S3C64XX_PA_RTC #define S3C_PA_WDT S3C64XX_PA_WATCHDOG #define S3C_PA_SPI0 S3C64XX_PA_SPI0 diff --git a/arch/arm/mach-s3c64xx/mach-crag6410.c b/arch/arm/mach-s3c64xx/mach-crag6410.c index b0f5baf..fa02e2f 100644 --- a/arch/arm/mach-s3c64xx/mach-crag6410.c +++ b/arch/arm/mach-s3c64xx/mach-crag6410.c @@ -31,6 +31,7 @@ #include <linux/spi/spi.h> #include <linux/i2c/pca953x.h> +#include <linux/platform_data/samsung-usbphy.h> #include <video/platform_lcd.h> @@ -336,6 +337,7 @@ static struct platform_device wallvdd_device = { }; static struct platform_device *crag6410_devices[] __initdata = { + &samsung_device_usbphy, &s3c_device_hsmmc0, &s3c_device_hsmmc2, &s3c_device_i2c0, @@ -765,6 +767,7 @@ static const struct gpio_led_platform_data gpio_leds_pdata = { .num_leds = ARRAY_SIZE(gpio_leds), }; +static struct samsung_usbphy_data crag6410_usbphy_pdata; static void __init crag6410_machine_init(void) { @@ -790,6 +793,7 @@ static void __init crag6410_machine_init(void) s3c_i2c0_set_platdata(&i2c0_pdata); s3c_i2c1_set_platdata(&i2c1_pdata); s3c_fb_set_platdata(&crag6410_lcd_pdata); + samsung_usbphy_set_pdata(&crag6410_usbphy_pdata); i2c_register_board_info(0, i2c_devs0, ARRAY_SIZE(i2c_devs0)); i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1)); diff --git a/arch/arm/mach-s3c64xx/mach-smartq.c b/arch/arm/mach-s3c64xx/mach-smartq.c index 7400da1..e0c4df8 100644 --- a/arch/arm/mach-s3c64xx/mach-smartq.c +++ b/arch/arm/mach-s3c64xx/mach-smartq.c @@ -18,6 +18,7 @@ #include <linux/serial_core.h> #include <linux/spi/spi_gpio.h> #include <linux/usb/gpio_vbus.h> +#include <linux/platform_data/samsung-usbphy.h> #include <asm/mach-types.h> #include <asm/mach/map.h> @@ -234,6 +235,7 @@ static struct i2c_board_info smartq_i2c_devs[] __initdata = { }; static struct platform_device *smartq_devices[] __initdata = { + &samsung_device_usbphy, &s3c_device_hsmmc1, /* Init iNAND first, ... */ &s3c_device_hsmmc0, /* ... then the external SD card */ &s3c_device_hsmmc2, @@ -380,9 +382,12 @@ void __init smartq_map_io(void) smartq_lcd_mode_set(); } +static struct samsung_usbphy_data smartq_usbphy_pdata; + void __init smartq_machine_init(void) { s3c_i2c0_set_platdata(NULL); + samsung_usbphy_set_pdata(&smartq_usbphy_pdata); s3c_hwmon_set_platdata(&smartq_hwmon_pdata); s3c_sdhci1_set_platdata(&smartq_internal_hsmmc_pdata); s3c_sdhci2_set_platdata(&smartq_internal_hsmmc_pdata); diff --git a/arch/arm/mach-s3c64xx/mach-smdk6410.c b/arch/arm/mach-s3c64xx/mach-smdk6410.c index cbdc91b..8d40511 100644 --- a/arch/arm/mach-s3c64xx/mach-smdk6410.c +++ b/arch/arm/mach-s3c64xx/mach-smdk6410.c @@ -30,6 +30,7 @@ #include <linux/regulator/fixed.h> #include <linux/regulator/machine.h> #include <linux/pwm_backlight.h> +#include <linux/platform_data/samsung-usbphy.h> #ifdef CONFIG_SMDK6410_WM1190_EV1 #include <linux/mfd/wm8350/core.h> @@ -263,6 +264,7 @@ static struct samsung_keypad_platdata smdk6410_keypad_data __initdata = { static struct map_desc smdk6410_iodesc[] = {}; static struct platform_device *smdk6410_devices[] __initdata = { + &samsung_device_usbphy, #ifdef CONFIG_SMDK6410_SD_CH0 &s3c_device_hsmmc0, #endif @@ -626,6 +628,7 @@ static struct platform_pwm_backlight_data smdk6410_bl_data = { .pwm_id = 1, }; +static struct samsung_usbphy_data smdk6410_usbphy_pdata; static void __init smdk6410_map_io(void) { @@ -655,6 +658,7 @@ static void __init smdk6410_machine_init(void) s3c_i2c0_set_platdata(NULL); s3c_i2c1_set_platdata(NULL); s3c_fb_set_platdata(&smdk6410_lcd_pdata); + samsung_usbphy_set_pdata(&smdk6410_usbphy_pdata); samsung_keypad_set_platdata(&smdk6410_keypad_data); diff --git a/arch/arm/mach-s3c64xx/setup-usb-phy.c b/arch/arm/mach-s3c64xx/setup-usb-phy.c index 7a09553..3aee778 100644 --- a/arch/arm/mach-s3c64xx/setup-usb-phy.c +++ b/arch/arm/mach-s3c64xx/setup-usb-phy.c @@ -9,3 +9,17 @@ * */ +#include <linux/io.h> +#include <mach/map.h> +#include <mach/regs-sys.h> + +void s5p_usb_phy_pmu_isolation(int on) +{ + if (on) { + writel(readl(S3C64XX_OTHERS) & ~S3C64XX_OTHERS_USBMASK, + S3C64XX_OTHERS); + } else { + writel(readl(S3C64XX_OTHERS) | S3C64XX_OTHERS_USBMASK, + S3C64XX_OTHERS); + } +} diff --git a/arch/arm/plat-samsung/devs.c b/arch/arm/plat-samsung/devs.c index 74e31ce..a094143 100644 --- a/arch/arm/plat-samsung/devs.c +++ b/arch/arm/plat-samsung/devs.c @@ -31,6 +31,7 @@ #include <linux/ioport.h> #include <linux/platform_data/s3c-hsudc.h> #include <linux/platform_data/s3c-hsotg.h> +#include <linux/platform_data/samsung-usbphy.h> #include <asm/irq.h> #include <asm/pmu.h> @@ -1343,6 +1344,35 @@ struct platform_device s5p_device_mixer = { /* USB */ +#ifdef CONFIG_S3C_DEV_USB_HSOTG +/* USB PHY*/ +static struct resource samsung_usbphy_resource[] = { + [0] = { + .start = S3C_PA_USB_PHY, + .end = S3C_PA_USB_PHY + SZ_16 - 1, + .flags = IORESOURCE_MEM, + }, +}; + +struct platform_device samsung_device_usbphy = { + .name = "s3c64xx-usbphy", + .id = -1, + .num_resources = ARRAY_SIZE(samsung_usbphy_resource), + .resource = samsung_usbphy_resource, +}; + +void __init samsung_usbphy_set_pdata(struct samsung_usbphy_data *pd) +{ + struct samsung_usbphy_data *npd; + + npd = s3c_set_platdata(pd, sizeof(struct samsung_usbphy_data), + &samsung_device_usbphy); + + if (!npd->pmu_isolation) + npd->pmu_isolation = s5p_usb_phy_pmu_isolation; +} +#endif + #ifdef CONFIG_S3C_DEV_USB_HOST static struct resource s3c_usb_resource[] = { [0] = DEFINE_RES_MEM(S3C_PA_USBHOST, SZ_256), @@ -1449,6 +1479,8 @@ struct platform_device s3c_device_usb_hsotg = { }, }; +#ifndef CONFIG_ARCH_S3C64XX +/* TODO: To be removed later. Currently only S3C64XX is platform data free */ void __init s3c_hsotg_set_platdata(struct s3c_hsotg_plat *pd) { struct s3c_hsotg_plat *npd; @@ -1461,6 +1493,7 @@ void __init s3c_hsotg_set_platdata(struct s3c_hsotg_plat *pd) if (!npd->phy_exit) npd->phy_exit = s5p_usb_phy_exit; } +#endif #endif /* CONFIG_S3C_DEV_USB_HSOTG */ /* USB High Spped 2.0 Device (Gadget) */ diff --git a/arch/arm/plat-samsung/include/plat/devs.h b/arch/arm/plat-samsung/include/plat/devs.h index 5da4b4f..3849c88 100644 --- a/arch/arm/plat-samsung/include/plat/devs.h +++ b/arch/arm/plat-samsung/include/plat/devs.h @@ -138,6 +138,7 @@ extern struct platform_device exynos_device_drm; extern struct platform_device samsung_asoc_dma; extern struct platform_device samsung_asoc_idma; extern struct platform_device samsung_device_keypad; +extern struct platform_device samsung_device_usbphy; /* s3c2440 specific devices */ diff --git a/arch/arm/plat-samsung/include/plat/usb-phy.h b/arch/arm/plat-samsung/include/plat/usb-phy.h index 959bcdb..165ffe7 100644 --- a/arch/arm/plat-samsung/include/plat/usb-phy.h +++ b/arch/arm/plat-samsung/include/plat/usb-phy.h @@ -18,5 +18,6 @@ enum s5p_usb_phy_type { extern int s5p_usb_phy_init(struct platform_device *pdev, int type); extern int s5p_usb_phy_exit(struct platform_device *pdev, int type); +extern void s5p_usb_phy_pmu_isolation(int on); #endif /* __PLAT_SAMSUNG_USB_PHY_H */
Adding platform device for samsung-usbphy driver. Enabling it for s3c64xx based machines using s3c-hsotg. Signed-off-by: Praveen Paneri <p.paneri@samsung.com> --- arch/arm/mach-s3c64xx/include/mach/map.h | 2 + arch/arm/mach-s3c64xx/mach-crag6410.c | 4 +++ arch/arm/mach-s3c64xx/mach-smartq.c | 5 ++++ arch/arm/mach-s3c64xx/mach-smdk6410.c | 4 +++ arch/arm/mach-s3c64xx/setup-usb-phy.c | 14 +++++++++++ arch/arm/plat-samsung/devs.c | 33 ++++++++++++++++++++++++++ arch/arm/plat-samsung/include/plat/devs.h | 1 + arch/arm/plat-samsung/include/plat/usb-phy.h | 1 + 8 files changed, 64 insertions(+), 0 deletions(-)