usb: phy: samsung: Introducing usb phy driver for samsung SoCs
Subsystems (5)
v3 cover usb: phy: samsung: Introducing usb phy driver for samsung SoCs
Changes from v2:
Changed the driver filenames to samsung-usbphy
Changed 's3c' to 'samsung' for platform device as well as platform data Moved platform data structure to a separate file
Rectified coding style related errors
Changes from v1:
Rebased patches to latest usb-next branch
Changed the name 'sec_usbphy' to 'samsung_usbphy'
This patch set introduces a phy driver for samsung SoCs. It uses the existing transceiver infrastructure to provide phy control functions. Use of this driver can be extended for usb host phy as well. Over the period of time all the phy related code for most of the samsung SoCs can be integrated here. Removing the existing phy code from mach-s3c64xx. Same can be done for other SoCs when they start supporting this phy driver.
This driver is tested with smdk6410 and Exynos4210(with DT).
Praveen Paneri (5):
usb: phy: samsung: Introducing usb phy driver for hsotg
usb: s3c-hsotg: Adding phy driver support
ARM: S3C64XX: Removing old phy setup code
ARM: S3C64XX: Enabling samsung-usbphy driver
ARM: Exynos4210: Enabling samsung-usbphy driver
.../devicetree/bindings/usb/samsung-usbphy.txt | 9 + arch/arm/boot/dts/exynos4210.dtsi | 5 + arch/arm/mach-exynos/include/mach/map.h | 1 + arch/arm/mach-exynos/mach-exynos4-dt.c | 8 + arch/arm/mach-exynos/setup-usb-phy.c | 13 + arch/arm/mach-s3c64xx/include/mach/map.h | 2 + arch/arm/mach-s3c64xx/mach-crag6410.c | 7 +- arch/arm/mach-s3c64xx/mach-smartq.c | 8 +- arch/arm/mach-s3c64xx/mach-smdk6410.c | 7 +- arch/arm/mach-s3c64xx/setup-usb-phy.c | 79 +---- 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 + drivers/usb/gadget/s3c-hsotg.c | 40 ++- drivers/usb/phy/Kconfig | 8 + drivers/usb/phy/Makefile | 1 + drivers/usb/phy/samsung-usbphy.c | 355 ++++++++++++++++++++ drivers/usb/phy/samsung-usbphy.h | 48 +++ include/linux/platform_data/samsung-usbphy.h | 27 ++ 19 files changed, 562 insertions(+), 91 deletions(-) create mode 100644 Documentation/devicetree/bindings/usb/samsung-usbphy.txt create mode 100644 drivers/usb/phy/samsung-usbphy.c create mode 100644 drivers/usb/phy/samsung-usbphy.h create mode 100644 include/linux/platform_data/samsung-usbphy.h
PATCH v3 1/5 usb: phy: samsung: Introducing usb phy driver for hsotg
This driver uses usb_phy interface to interact with s3c-hsotg. Supports phy_init and phy_shutdown functions to enable/disable phy. Tested with smdk6410 and smdkv310. More SoCs can be brought under later.
--- .../devicetree/bindings/usb/samsung-usbphy.txt | 9 + drivers/usb/phy/Kconfig | 8 + drivers/usb/phy/Makefile | 1 + drivers/usb/phy/samsung-usbphy.c | 355 ++++++++++++++++++++ drivers/usb/phy/samsung-usbphy.h | 48 +++ include/linux/platform_data/samsung-usbphy.h | 27 ++ 6 files changed, 448 insertions(+), 0 deletions(-) create mode 100644 Documentation/devicetree/bindings/usb/samsung-usbphy.txt create mode 100644 drivers/usb/phy/samsung-usbphy.c create mode 100644 drivers/usb/phy/samsung-usbphy.h create mode 100644 include/linux/platform_data/samsung-usbphy.h
Documentation/devicetree/bindings/usb/samsung-usbphy.txt new file +9 -0
@@ -0,0 +1,9 @@ +* Samsung's usb phy transceiver + +The Samsung's phy transceiver is used for controlling usb otg phy for +s3c-hsotg usb device controller. + +Required properties: +- compatible : should be "samsung,exynos4210-usbphy" +- reg : base physical address of the phy registers and length of memory mapped + region.
drivers/usb/phy/Kconfig +8 -0
@@ -15,3 +15,11 @@ config USB_ISP1301 To compile this driver as a module, choose M here: the module will be called isp1301. + +config SAMSUNG_USBPHY + bool "Samsung USB PHY controller Driver" + depends on USB_S3C_HSOTG + select USB_OTG_UTILS + help + Enable this to support Samsung USB phy controller for samsung + SoCs.
drivers/usb/phy/Makefile +1 -0
@@ -5,3 +5,4 @@ ccflags-$(CONFIG_USB_DEBUG) := -DDEBUG obj-$(CONFIG_USB_ISP1301) += isp1301.o +obj-$(CONFIG_SAMSUNG_USBPHY) += samsung-usbphy.o
drivers/usb/phy/samsung-usbphy.c new file +355 -0
355 lines not on this page · raw message
drivers/usb/phy/samsung-usbphy.h new file +48 -0
48 lines not on this page · raw message
include/linux/platform_data/samsung-usbphy.h new file +27 -0
@@ -0,0 +1,27 @@ +/* +* Copyright (C) 2012 Samsung Electronics Co.Ltd +* http://www.samsung.com/ +* Author: Praveen Paneri <[email protected]> +* +* Defines platform data for samsung usb phy driver. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at your +* option) any later version. +*/ + +#ifndef __SAMSUNG_USBPHY_PLATFORM_H +#define __SAMSUNG_USBPHY_PLATFORM_H + +/** +* samsung_usbphy_data - Platform data for USB PHY driver. +* @pmu_isolation: Function to control usb phy isolation in PMU. +*/ +struct samsung_usbphy_data { +void (*pmu_isolation)(int on); +}; + +extern void samsung_usbphy_set_pdata (struct samsung_usbphy_data *pd); + +#endif /* __SAMSUNG_USBPHY_PLATFORM_H */
Signature · 1 line
1.7.1
PATCH v3 1/5 usb: phy: samsung: Introducing usb phy driver for hsotg
drivers/usb/phy/samsung-usbphy.c line 344
Quoted 5 lines · Praveen Paneri
drivers/usb/phy/samsung-usbphy.c new file +5
-0+static int __init samsung_usbphy_driver_init (void ) +{ +return platform_driver_register (&samsung_usbphy_driver); +} +subsys_initcall (samsung_usbphy_driver_init);
let's make use of the module_platform_driver() and have dependent drivers return -EPROBE_DEFER until this has registered.
Signature · 8 lines
balbi -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120809/c83bf221/attachment.sig>
PATCH v3 1/5 usb: phy: samsung: Introducing usb phy driver for hsotg
Quoted 9 lines · Felipe Balbi
drivers/usb/phy/samsung-usbphy.c line 344
Quoted 5 lines · Praveen Paneri
drivers/usb/phy/samsung-usbphy.c new file +5
-0+static int __init samsung_usbphy_driver_init (void ) +{ +return platform_driver_register (&samsung_usbphy_driver); +} +subsys_initcall (samsung_usbphy_driver_init);let's make use of the
module_platform_driver()and have dependent drivers return -EPROBE_DEFER until this has registered.
Thanks! I will modify accordingly and resend.
Praveen
Quoted 3 lines
--
balbi
PATCH v3 2/5 usb: s3c-hsotg: Adding phy driver support
In reply to Praveen PaneriAdding the transceiver to hsotg driver. Keeping the platform data for continuing the smooth operation for boards which still uses it
--- drivers/usb/gadget/s3c-hsotg.c | 40 ++++++++++++++++++++++++++++++---------- 1 files changed, 30 insertions(+), 10 deletions(-)
drivers/usb/gadget/s3c-hsotg.c +30 -10
@@ -32,6 +32,7 @@#include <linux/usb/ch9.h> #include <linux/usb/gadget.h> +#include <linux/usb/otg.h> #include <linux/platform_data/s3c-hsotg.h> #include <mach/map.h>
@@ -133,7 +134,9 @@ struct s3c_hsotg_ep {* struct s3c_hsotg - driver state. * @dev: The parent device supplied to the probe function * @driver: USB gadget driver -* @plat: The platform specific configuration data. +* @phy: The otg phy transceiver structure for phy control. +* @plat: The platform specific configuration data. This can be removed once +* all SoCs support usb transceiver. * @regs: The memory area mapped for accessing registers. * @irq: The IRQ number we are using * @supplies: Definition of USB power supplies
@@ -153,6 +156,7 @@ struct s3c_hsotg_ep {struct s3c_hsotg {struct device *dev;struct usb_gadget_driver *driver; +struct usb_phy *phy;struct s3c_hsotg_plat *plat;spinlock_t lock;
@@ -2854,7 +2858,10 @@ static void s3c_hsotg_phy_enable(struct s3c_hsotg *hsotg)struct platform_device *pdev =to_platform_device (hsotg->dev);dev_dbg (hsotg->dev,"pdev 0x%p\n" , pdev); -if (hsotg->plat->phy_init) + +if (hsotg->phy) +usb_phy_init (hsotg->phy); +else if (hsotg->plat->phy_init) hsotg->plat->phy_init (pdev, hsotg->plat->phy_type); }
@@ -2869,7 +2876,9 @@ static void s3c_hsotg_phy_disable(struct s3c_hsotg *hsotg) {struct platform_device *pdev =to_platform_device (hsotg->dev); -if (hsotg->plat->phy_exit) +if (hsotg->phy) +usb_phy_shutdown (hsotg->phy); +else if (hsotg->plat->phy_exit) hsotg->plat->phy_exit (pdev, hsotg->plat->phy_type); }
@@ -3493,6 +3502,7 @@ static void s3c_hsotg_release(struct device *dev)static int __devinit s3c_hsotg_probe (struct platform_device *pdev) {struct s3c_hsotg_plat *plat = pdev->dev.platform_data; +struct usb_phy *phy;struct device *dev = &pdev->dev;struct s3c_hsotg_ep *eps;struct s3c_hsotg *hsotg;
@@ -3501,20 +3511,27 @@ static int __devinit s3c_hsotg_probe(struct platform_device *pdev)int ret;int i; - plat = pdev->dev.platform_data; -if (!plat) { -dev_err (&pdev->dev,"no platform data defined\n" ); -return -EINVAL ; - } - hsotg =devm_kzalloc (&pdev->dev,sizeof (struct s3c_hsotg ),GFP_KERNEL );if (!hsotg) {dev_err (dev,"cannot get memory\n" );return -ENOMEM ; } + phy =devm_usb_get_phy (dev,USB_PHY_TYPE_USB2 ); +if (!phy) { +/* Fallback for platform data */ + plat = pdev->dev.platform_data; +if (!plat) { +dev_err (&pdev->dev,"no platform data or transceiver defined\n" ); +return -ENODEV ; + }else { + hsotg->plat = plat; + } + }else { + hsotg->phy = phy; + } + hsotg->dev = dev; - hsotg->plat = plat; hsotg->clk =clk_get (&pdev->dev,"otg" );if (IS_ERR (hsotg->clk)) {
@@ -3689,6 +3706,9 @@ static int __devexit s3c_hsotg_remove(struct platform_device *pdev)s3c_hsotg_phy_disable (hsotg);regulator_bulk_free (ARRAY_SIZE (hsotg->supplies), hsotg->supplies); +if (hsotg->phy) +devm_usb_put_phy (&pdev->dev, hsotg->phy); +clk_disable_unprepare (hsotg->clk);clk_put (hsotg->clk);
Signature · 1 line
1.7.1
PATCH v3 2/5 usb: s3c-hsotg: Adding phy driver support
drivers/usb/gadget/s3c-hsotg.c static int __devexit s3c_hsotg_remove(struct platform_device *pdev) · line 3710
Quoted 6 lines · Praveen Paneri
drivers/usb/gadget/s3c-hsotg.c +2
-0@@ -3689,6 +3706,9 @@ static int __devexit s3c_hsotg_remove(struct platform_device *pdev)s3c_hsotg_phy_disable (hsotg);regulator_bulk_free (ARRAY_SIZE (hsotg->supplies), hsotg->supplies); +if (hsotg->phy) +devm_usb_put_phy (&pdev->dev, hsotg->phy);
unnecessary. This will be called for you when the platform_device object is detroyed.
Signature · 8 lines
balbi -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120809/f4376439/attachment-0001.sig>
PATCH v3 2/5 usb: s3c-hsotg: Adding phy driver support
Quoted 10 lines · Felipe Balbi
drivers/usb/gadget/s3c-hsotg.c static int __devexit s3c_hsotg_remove(struct platform_device *pdev) · line 3710
Quoted 6 lines · Praveen Paneri
drivers/usb/gadget/s3c-hsotg.c +2
-0@@ -3689,6 +3706,9 @@ static int __devexit s3c_hsotg_remove(struct platform_device *pdev)s3c_hsotg_phy_disable (hsotg);regulator_bulk_free (ARRAY_SIZE (hsotg->supplies), hsotg->supplies); +if (hsotg->phy) +devm_usb_put_phy (&pdev->dev, hsotg->phy);unnecessary. This will be called for you when the
platform_deviceobject is detroyed.
Off-course, I will remove this.
Thanks
Praveen
Quoted 3 lines
--
balbi
PATCH v3 3/5 ARM: S3C64XX: Removing old phy setup code
In reply to Praveen PaneriThis patch removes old phy code from platform side. 'setup-usb-phy.c' will be used for providing transceiver platform data in next patch. Not all of the platform data code is removed as there are others making use of platform_data defined for hsotg. That can be removed once all the SoCs start using the new transceiver for usb phy setup.
--- arch/arm/mach-s3c64xx/mach-crag6410.c | 3 - arch/arm/mach-s3c64xx/mach-smartq.c | 3 - arch/arm/mach-s3c64xx/mach-smdk6410.c | 3 - arch/arm/mach-s3c64xx/setup-usb-phy.c | 79 --------------------------------- 4 files changed, 0 insertions(+), 88 deletions(-)
arch/arm/mach-s3c64xx/mach-crag6410.c +0 -3
@@ -31,7 +31,6 @@#include <linux/spi/spi.h> #include <linux/i2c/pca953x.h> -#include <linux/platform_data/s3c-hsotg.h> #include <video/platform_lcd.h>
@@ -766,7 +765,6 @@ static const struct gpio_led_platform_data gpio_leds_pdata = { .num_leds = ARRAY_SIZE(gpio_leds), }; -static struct s3c_hsotg_plat crag6410_hsotg_pdata;static void __init crag6410_machine_init (void ) {
@@ -792,7 +790,6 @@ 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); -s3c_hsotg_set_platdata (&crag6410_hsotg_pdata);i2c_register_board_info (0 , i2c_devs0,ARRAY_SIZE (i2c_devs0));i2c_register_board_info (1 , i2c_devs1,ARRAY_SIZE (i2c_devs1));
arch/arm/mach-s3c64xx/mach-smartq.c +0 -3
@@ -18,7 +18,6 @@#include <linux/serial_core.h> #include <linux/spi/spi_gpio.h> #include <linux/usb/gpio_vbus.h> -#include <linux/platform_data/s3c-hsotg.h> #include <asm/mach-types.h> #include <asm/mach/map.h>
@@ -187,7 +186,6 @@ static struct s3c_hwmon_pdata smartq_hwmon_pdata __initdata = { }, }; -static struct s3c_hsotg_plat smartq_hsotg_pdata;static int __init smartq_lcd_setup_gpio (void ) {
@@ -385,7 +383,6 @@ void __init smartq_map_io(void)void __init smartq_machine_init (void ) {s3c_i2c0_set_platdata (NULL ); -s3c_hsotg_set_platdata (&smartq_hsotg_pdata);s3c_hwmon_set_platdata (&smartq_hwmon_pdata);s3c_sdhci1_set_platdata (&smartq_internal_hsmmc_pdata);s3c_sdhci2_set_platdata (&smartq_internal_hsmmc_pdata);
arch/arm/mach-s3c64xx/mach-smdk6410.c +0 -3
@@ -30,7 +30,6 @@#include <linux/regulator/fixed.h> #include <linux/regulator/machine.h> #include <linux/pwm_backlight.h> -#include <linux/platform_data/s3c-hsotg.h> #ifdef CONFIG_SMDK6410_WM1190_EV1 #include <linux/mfd/wm8350/core.h>
@@ -627,7 +626,6 @@ static struct platform_pwm_backlight_data smdk6410_bl_data = { .pwm_id = 1, }; -static struct s3c_hsotg_plat smdk6410_hsotg_pdata;static void __init smdk6410_map_io (void ) {
@@ -657,7 +655,6 @@ static void __init smdk6410_machine_init(void)s3c_i2c0_set_platdata (NULL );s3c_i2c1_set_platdata (NULL );s3c_fb_set_platdata (&smdk6410_lcd_pdata); -s3c_hsotg_set_platdata (&smdk6410_hsotg_pdata);samsung_keypad_set_platdata (&smdk6410_keypad_data);
arch/arm/mach-s3c64xx/setup-usb-phy.c +0 -79
82 lines not on this page · raw message
Signature · 1 line
1.7.1
PATCH v3 4/5 ARM: S3C64XX: Enabling samsung-usbphy driver
In reply to Praveen PaneriAdding platform device for samsung-usbphy driver. Enabling it for s3c64xx based machines using s3c-hsotg.
--- 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(-)
arch/arm/mach-s3c64xx/include/mach/map.h +2 -0
@@ -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
arch/arm/mach-s3c64xx/mach-crag6410.c +4 -0
@@ -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));
arch/arm/mach-s3c64xx/mach-smartq.c +5 -0
@@ -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);
arch/arm/mach-s3c64xx/mach-smdk6410.c +4 -0
@@ -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);
arch/arm/mach-s3c64xx/setup-usb-phy.c +14 -0
@@ -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 ); + } +}
arch/arm/plat-samsung/devs.c +33 -0
@@ -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) */
arch/arm/plat-samsung/include/plat/devs.h +1 -0
@@ -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 */
arch/arm/plat-samsung/include/plat/usb-phy.h +1 -0
@@ -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 */
Signature · 1 line
1.7.1
PATCH v3 4/5 ARM: S3C64XX: Enabling samsung-usbphy driver
Hi Praveen,
Quoted 16 lines
-----Original Message-----
From: linux-usb-owner at vger.kernel.org [mailto:linux-usb-
owner at vger.kernel.org] On Behalf Of Praveen Paneri
Sent: Wednesday, August 08, 2012 4:41 PM
To: linux-usb at vger.kernel.org
Cc: devicetree-discuss at lists.ozlabs.org; linux-arm-
kernel at lists.infradead.org; linux-samsung-soc at vger.kernel.org; kgene.kim at samsung.com; balbi at ti.com; gregkh at linuxfoundation.org; thomas.abraham at linaro.org; ben-linux at fluff.org;
broonie at opensource.wolfsonmicro.com; l.majewski at samsung.com; kyungmin.park at samsung.com; grant.likely at secretlab.ca; heiko at sntech.de
Subject: [PATCH v3 4/5] ARM: S3C64XX: Enabling samsung-usbphy driverAdding platform device for samsung-usbphy driver. Enabling it for s3c64xx based machines using s3c-hsotg.
Quoted 8 lines
Signed-off-by Praveen Paneri <[email protected]>--- 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
++++++++++++++++++++++++++
Quoted 47 lines
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(-)arch/arm/mach- renamed from arch/arm/mach-s3c64xx/include/mach/map.h +0
-0
s3c64xx/include/mach/map.h
index 8e2097b..dc482bb 100644arch/arm/mach-s3c64xx/include/mach/map.h +2
-0@@ -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_SPI0arch/arm/mach- renamed from arch/arm/mach-s3c64xx/mach-crag6410.c +0
-0
s3c64xx/mach-crag6410.c
index b0f5baf..fa02e2f 100644arch/arm/mach-s3c64xx/mach-crag6410.c +2
-0@@ -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,
arch/arm/mach-s3c64xx/mach-crag6410.c static const struct gpio_led_platform_data · line 771
Quoted 5 lines
arch/arm/mach-s3c64xx/mach-crag6410.c +1
-0@@ -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).
Quoted 34 lines
arch/arm/mach-s3c64xx/mach-crag6410.c +1
-0static 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));arch/arm/mach- renamed from arch/arm/mach-s3c64xx/mach-smartq.c +0
-0
s3c64xx/mach-smartq.c
index 7400da1..e0c4df8 100644arch/arm/mach-s3c64xx/mach-smartq.c +2
-0@@ -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 */ arch/arm/mach-s3c64xx/mach-smartq.c +0
-0&s3c_device_hsmmc2,
arch/arm/mach-s3c64xx/mach-smartq.c void __init smartq_map_io(void) · line 385
Quoted 4 lines
arch/arm/mach-s3c64xx/mach-smartq.c +1
-0@@ -380,9 +382,12 @@ void __init smartq_map_io(void)smartq_lcd_mode_set (); } +static struct samsung_usbphy_data smartq_usbphy_pdata;
Same here
Quoted 31 lines
arch/arm/mach-s3c64xx/mach-smartq.c +2
-0+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);arch/arm/mach- renamed from arch/arm/mach-s3c64xx/mach-smdk6410.c +0
-0
s3c64xx/mach-smdk6410.c
index cbdc91b..8d40511 100644arch/arm/mach-s3c64xx/mach-smdk6410.c +2
-0@@ -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
arch/arm/mach-s3c64xx/mach-smdk6410.c static struct platform_pwm_backlight_data · line 632
Quoted 5 lines
arch/arm/mach-s3c64xx/mach-smdk6410.c +1
-0@@ -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
Quoted 133 lines
arch/arm/mach-s3c64xx/mach-smdk6410.c +1
-0static 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);arch/arm/mach- renamed from arch/arm/mach-s3c64xx/setup-usb-phy.c +0
-0
s3c64xx/setup-usb-phy.c
index 7a09553..3aee778 100644arch/arm/mach-s3c64xx/setup-usb-phy.c +14
-0@@ -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 ); + } +}arch/arm/plat-samsung/devs.c +32
-0@@ -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__inits3c_hsotg_set_platdata(struct s3c_hsotg_plat *pd){arch/arm/plat-samsung/devs.c +1
-0struct 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) */
arch/arm/plat- renamed from arch/arm/plat-samsung/include/plat/devs.h +0
-0
samsung/include/plat/devs.h
index 5da4b4f..3849c88 100644arch/arm/plat-samsung/include/plat/devs.h +1
-0@@ -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 */ arch/arm/plat- renamed from arch/arm/plat-samsung/include/plat/usb-phy.h +0
-0
samsung/include/plat/usb-phy.h
index 959bcdb..165ffe7 100644arch/arm/plat-samsung/include/plat/usb-phy.h +1
-1@@ -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 at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v3 4/5 ARM: S3C64XX: Enabling samsung-usbphy driver
Quoted 78 lines · Anton Tikhomirov
Hi Praveen,
Quoted 16 lines
-----Original Message-----
From: linux-usb-owner at vger.kernel.org [mailto:linux-usb-
owner at vger.kernel.org] On Behalf Of Praveen Paneri
Sent: Wednesday, August 08, 2012 4:41 PM
To: linux-usb at vger.kernel.org
Cc: devicetree-discuss at lists.ozlabs.org; linux-arm-
kernel at lists.infradead.org; linux-samsung-soc at vger.kernel.org; kgene.kim at samsung.com; balbi at ti.com; gregkh at linuxfoundation.org; thomas.abraham at linaro.org; ben-linux at fluff.org;
broonie at opensource.wolfsonmicro.com; l.majewski at samsung.com; kyungmin.park at samsung.com; grant.likely at secretlab.ca; heiko at sntech.de
Subject: [PATCH v3 4/5] ARM: S3C64XX: Enabling samsung-usbphy driverAdding platform device for samsung-usbphy driver. Enabling it for s3c64xx based machines using s3c-hsotg.
Quoted 8 lines
Signed-off-by Praveen Paneri <[email protected]>--- 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++++++++++++++++++++++++++
Quoted 51 lines
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(-)arch/arm/mach- renamed from arch/arm/mach-s3c64xx/include/mach/map.h +0
-0
s3c64xx/include/mach/map.h
index 8e2097b..dc482bb 100644arch/arm/mach-s3c64xx/include/mach/map.h +2
-0@@ -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_SPI0arch/arm/mach- renamed from arch/arm/mach-s3c64xx/mach-crag6410.c +0
-0
s3c64xx/mach-crag6410.c
index b0f5baf..fa02e2f 100644arch/arm/mach-s3c64xx/mach-crag6410.c +2
-0@@ -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), };
Quoted 5 lines
arch/arm/mach-s3c64xx/mach-crag6410.c static const struct gpio_led_platform_data gpio_leds_pdata = { · line 770
Quoted 1 line
arch/arm/mach-s3c64xx/mach-crag6410.c +1
-0+static struct samsung_usbphy_data crag6410_usbphy_pdata;Why don't you use
__initdatafor this structure? It will be duplicated ins3c_set_platdata()and we don't need it in memory after booting. I think you can even initialize it here (withs5p_usb_phy_pmu_isolation).
Thanks! will change it.
Praveen
Quoted 219 lines
Quoted 35 lines
arch/arm/mach-s3c64xx/mach-crag6410.c +1
-0static 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));arch/arm/mach- renamed from arch/arm/mach-s3c64xx/mach-smartq.c +0
-0
s3c64xx/mach-smartq.c
index 7400da1..e0c4df8 100644arch/arm/mach-s3c64xx/mach-smartq.c +2
-0@@ -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,arch/arm/mach-s3c64xx/mach-smartq.c void __init smartq_map_io(void) · line 385
Quoted 4 lines
arch/arm/mach-s3c64xx/mach-smartq.c +1
-0@@ -380,9 +382,12 @@ void __init smartq_map_io(void)smartq_lcd_mode_set (); } +static struct samsung_usbphy_data smartq_usbphy_pdata;Same here
Quoted 31 lines
arch/arm/mach-s3c64xx/mach-smartq.c +2
-0+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);arch/arm/mach- renamed from arch/arm/mach-s3c64xx/mach-smdk6410.c +0
-0
s3c64xx/mach-smdk6410.c
index cbdc91b..8d40511 100644arch/arm/mach-s3c64xx/mach-smdk6410.c +2
-0@@ -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
arch/arm/mach-s3c64xx/mach-smdk6410.c static struct platform_pwm_backlight_data · line 632
Quoted 5 lines
arch/arm/mach-s3c64xx/mach-smdk6410.c +1
-0@@ -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
Quoted 129 lines
arch/arm/mach-s3c64xx/mach-smdk6410.c +1
-0static 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);arch/arm/mach- renamed from arch/arm/mach-s3c64xx/setup-usb-phy.c +0
-0
s3c64xx/setup-usb-phy.c
index 7a09553..3aee778 100644arch/arm/mach-s3c64xx/setup-usb-phy.c +14
-0@@ -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 ); + } +}arch/arm/plat-samsung/devs.c +32
-0@@ -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__inits3c_hsotg_set_platdata(struct s3c_hsotg_plat *pd){ struct s3c_hsotg_plat *npd;arch/arm/plat-samsung/devs.c +1
-0@@ -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) */
arch/arm/plat- renamed from arch/arm/plat-samsung/include/plat/devs.h +0
-0
samsung/include/plat/devs.h
index 5da4b4f..3849c88 100644arch/arm/plat-samsung/include/plat/devs.h +1
-0@@ -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 */ arch/arm/plat- renamed from arch/arm/plat-samsung/include/plat/usb-phy.h +0
-0
samsung/include/plat/usb-phy.h
index 959bcdb..165ffe7 100644arch/arm/plat-samsung/include/plat/usb-phy.h +1
-1@@ -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
Quoted 4 lines
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo at 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 at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v3 5/5 ARM: Exynos4210: Enabling samsung-usbphy driver
In reply to Praveen PaneriAdding usbphy node for Exynos4210 along with the platform data.
--- arch/arm/boot/dts/exynos4210.dtsi | 5 +++++ arch/arm/mach-exynos/include/mach/map.h | 1 + arch/arm/mach-exynos/mach-exynos4-dt.c | 8 ++++++++ arch/arm/mach-exynos/setup-usb-phy.c | 13 +++++++++++++ 4 files changed, 27 insertions(+), 0 deletions(-)
arch/arm/boot/dts/exynos4210.dtsi +5 -0
@@ -62,6 +62,11 @@ interrupts = <0 44 0>, <0 45 0>; }; + usbphy@125B0000 { + compatible = "samsung,exynos4210-usbphy"; + reg = <0x125B0000 0x100>; + }; + keypad@100A0000 { compatible = "samsung,s5pv210-keypad"; reg = <0x100A0000 0x100>;
arch/arm/mach-exynos/include/mach/map.h +1 -0
@@ -234,6 +234,7 @@#define S3C_PA_SPI1 EXYNOS4_PA_SPI1#define S3C_PA_SPI2 EXYNOS4_PA_SPI2#define S3C_PA_USB_HSOTG EXYNOS4_PA_HSOTG +#define S3C_PA_USB_PHY EXYNOS4_PA_HSPHY#define S5P_PA_EHCI EXYNOS4_PA_EHCI#define S5P_PA_FIMC0 EXYNOS4_PA_FIMC0
arch/arm/mach-exynos/mach-exynos4-dt.c +8 -0
@@ -13,6 +13,7 @@#include <linux/of_platform.h> #include <linux/serial_core.h> +#include <linux/platform_data/samsung-usbphy.h> #include <asm/mach/arch.h> #include <asm/hardware/gic.h>
@@ -20,9 +21,14 @@#include <plat/cpu.h> #include <plat/regs-serial.h> +#include <plat/usb-phy.h> #include "common.h" +static struct samsung_usbphy_data exynos4_usbphy_pdata = { + .pmu_isolation = s5p_usb_phy_pmu_isolation, +}; +/* * The following lookup table is used to override device names when devices * are registered from device tree. This is temporarily added to enable
@@ -63,6 +69,8 @@ static const struct of_dev_auxdata exynos4210_auxdata_lookup[] __initconst = { "exynos4210-spi.2", NULL),OF_DEV_AUXDATA ("arm,pl330" ,EXYNOS4_PA_PDMA0 ,"dma-pl330.0" ,NULL ),OF_DEV_AUXDATA ("arm,pl330" ,EXYNOS4_PA_PDMA1 ,"dma-pl330.1" ,NULL ), +OF_DEV_AUXDATA ("samsung,exynos4210-usbphy" ,EXYNOS4_PA_HSPHY , + "s3c-usbphy", &exynos4_usbphy_pdata), {}, };
arch/arm/mach-exynos/setup-usb-phy.c +13 -0
@@ -221,3 +221,16 @@ int s5p_usb_phy_exit(struct platform_device *pdev, int type)return -EINVAL ; } + +void s5p_usb_phy_pmu_isolation (int on) +{ +if (on) { +writel (readl (S5P_USBDEVICE_PHY_CONTROL ) + & ~S5P_USBDEVICE_PHY_ENABLE , +S5P_USBDEVICE_PHY_CONTROL ); + }else { +writel (readl (S5P_USBDEVICE_PHY_CONTROL ) + |S5P_USBDEVICE_PHY_ENABLE , +S5P_USBDEVICE_PHY_CONTROL ); + } +}
Signature · 1 line
1.7.1
v3 cover usb: phy: samsung: Introducing usb phy driver for samsung SoCs
In reply to Praveen PaneriHi, Praveen.
Quoted 6 lines · Praveen Paneri
Changes from v2:
Changed the driver filenames to samsung-usbphy
Changed 's3c' to 'samsung' for platform device as well as platform data Moved platform data structure to a separate file
Rectified coding style related errors
Quoted 7 lines
Changes from v1:
Rebased patches to latest usb-next branch
Changed the name 'sec_usbphy' to 'samsung_usbphy'This patch set introduces a phy driver for samsung SoCs. It uses the existing transceiver infrastructure to provide phy control functions. Use of this driver can be extended for usb host phy as well.
How can you support usb host phy? I cannot choose to use which phy when call init or shutdown of phy at current phy framework.
Thanks.
Quoted 44 lines
Over the period of time all the phy
related code for most of the samsung SoCs can be integrated here. Removing the existing phy code from mach-s3c64xx. Same can be done for other SoCs when they start supporting this phy driver.
This driver is tested with smdk6410 and Exynos4210(with DT).Praveen Paneri (5):
usb: phy: samsung: Introducing usb phy driver for hsotg
usb: s3c-hsotg: Adding phy driver support
ARM: S3C64XX: Removing old phy setup code
ARM: S3C64XX: Enabling samsung-usbphy driver
ARM: Exynos4210: Enabling samsung-usbphy driver.../devicetree/bindings/usb/samsung-usbphy.txt | 9 + arch/arm/boot/dts/exynos4210.dtsi | 5 + arch/arm/mach-exynos/include/mach/map.h | 1 + arch/arm/mach-exynos/mach-exynos4-dt.c | 8 + arch/arm/mach-exynos/setup-usb-phy.c | 13 + arch/arm/mach-s3c64xx/include/mach/map.h | 2 + arch/arm/mach-s3c64xx/mach-crag6410.c | 7 +- arch/arm/mach-s3c64xx/mach-smartq.c | 8 +- arch/arm/mach-s3c64xx/mach-smdk6410.c | 7 +- arch/arm/mach-s3c64xx/setup-usb-phy.c | 79 +---- 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 + drivers/usb/gadget/s3c-hsotg.c | 40 ++- drivers/usb/phy/Kconfig | 8 + drivers/usb/phy/Makefile | 1 + drivers/usb/phy/samsung-usbphy.c | 355 ++++++++++++++++++++ drivers/usb/phy/samsung-usbphy.h | 48 +++ include/linux/platform_data/samsung-usbphy.h | 27 ++ 19 files changed, 562 insertions(+), 91 deletions(-)create mode 100644
Documentation/devicetree/bindings/usb/samsung-usbphy.txtcreate mode 100644drivers/usb/phy/samsung-usbphy.c
create mode 100644drivers/usb/phy/samsung-usbphy.h
create mode 100644include/linux/platform_data/samsung-usbphy.h_______________________________________________
linux-arm-kernel mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
v3 cover usb: phy: samsung: Introducing usb phy driver for samsung SoCs
Quoted 22 lines · Joonyoung Shim
Hi, Praveen.
Quoted 11 lines · Praveen Paneri
Changes from v2:
Changed the driver filenames to samsung-usbphy
Changed 's3c' to 'samsung' for platform device as well as platform data Moved platform data structure to a separate file
Rectified coding style related errorsChanges from v1:
Rebased patches to latest usb-next branch
Changed the name 'sec_usbphy' to 'samsung_usbphy'Quoted 5 lines
This patch set introduces a phy driver for samsung SoCs. It uses the existing
transceiver infrastructure to provide phy control functions. Use of this driver
can be extended for usb host phy as well.
Quoted 2 lines
How can you support usb host phy? I cannot choose to use which phy when call init or shutdown of phy at current phy framework.
If you are talking about choosing between PHY0 (for device) and PHY1 (for host), I think you can make use of the flags available in usb_phy to pass that information to phy driver and that can be handled there. This is just one way I have successfully implement two different phy control. There might be a better way to do that.
Thanks
Praveen
Quoted 56 lines
Thanks.
Quoted 42 lines
Over the period of time all the phy
related code for most of the samsung SoCs can be integrated here. Removing the existing phy code from mach-s3c64xx. Same can be done for other SoCs
when they start supporting this phy driver.
This driver is tested with smdk6410 and Exynos4210(with DT).Praveen Paneri (5):
usb: phy: samsung: Introducing usb phy driver for hsotg
usb: s3c-hsotg: Adding phy driver support
ARM: S3C64XX: Removing old phy setup code
ARM: S3C64XX: Enabling samsung-usbphy driver
ARM: Exynos4210: Enabling samsung-usbphy driver.../devicetree/bindings/usb/samsung-usbphy.txt | 9 + arch/arm/boot/dts/exynos4210.dtsi | 5 + arch/arm/mach-exynos/include/mach/map.h | 1 + arch/arm/mach-exynos/mach-exynos4-dt.c | 8 + arch/arm/mach-exynos/setup-usb-phy.c | 13 + arch/arm/mach-s3c64xx/include/mach/map.h | 2 + arch/arm/mach-s3c64xx/mach-crag6410.c | 7 +- arch/arm/mach-s3c64xx/mach-smartq.c | 8 +- arch/arm/mach-s3c64xx/mach-smdk6410.c | 7 +- arch/arm/mach-s3c64xx/setup-usb-phy.c | 79 +---- 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 + drivers/usb/gadget/s3c-hsotg.c | 40 ++- drivers/usb/phy/Kconfig | 8 + drivers/usb/phy/Makefile | 1 + drivers/usb/phy/samsung-usbphy.c | 355 ++++++++++++++++++++ drivers/usb/phy/samsung-usbphy.h | 48 +++ include/linux/platform_data/samsung-usbphy.h | 27 ++ 19 files changed, 562 insertions(+), 91 deletions(-)create mode 100644
Documentation/devicetree/bindings/usb/samsung-usbphy.txt
create mode 100644drivers/usb/phy/samsung-usbphy.ccreate mode 100644drivers/usb/phy/samsung-usbphy.hcreate mode 100644include/linux/platform_data/samsung-usbphy.hQuoted 5 lines
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
v3 cover usb: phy: samsung: Introducing usb phy driver for samsung SoCs
HI,
Quoted 23 lines · Praveen Paneri
Quoted 22 lines · Joonyoung Shim
Hi, Praveen.
Quoted 16 lines · Praveen Paneri
Changes from v2:
Changed the driver filenames to samsung-usbphy
Changed 's3c' to 'samsung' for platform device as well as platform data Moved platform data structure to a separate file
Rectified coding style related errorsChanges from v1:
Rebased patches to latest usb-next branch
Changed the name 'sec_usbphy' to 'samsung_usbphy'This patch set introduces a phy driver for samsung SoCs. It uses the existing
transceiver infrastructure to provide phy control functions. Use of this driver
can be extended for usb host phy as well.
Quoted 2 lines
Quoted 2 lines
How can you support usb host phy? I cannot choose to use which phy when call init or shutdown of phy at current phy framework.
correct. Curretly that's not supported. We are trying to come up with proper DeviceTree bindings to allow that. Kishon has been working on providing devm_usb_get_phy_by_phandle() would should help achieving what you need.
Quoted 3 lines
If you are talking about choosing between PHY0 (for device) and PHY1 (for host), I think you can make use of the flags available in
usb_phyto pass that information to phy driver and that can be handled there.
I rather you didn't do it that way. Those flags are used to pass features to the PHY. See drivers/usb/otg/ulpi.c, for instance.
Quoted 2 lines
This is just one way I have successfully implement two different phy control. There might be a better way to do that.
I guess using DT phandles is the way to go here.
Signature · 8 lines
balbi -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120810/cabed923/attachment.sig>
v3 cover usb: phy: samsung: Introducing usb phy driver for samsung SoCs
Quoted 38 lines · Felipe Balbi
HI,
Quoted 23 lines · Praveen Paneri
Quoted 22 lines · Joonyoung Shim
Hi, Praveen.
Quoted 16 lines · Praveen Paneri
Changes from v2:
Changed the driver filenames to samsung-usbphy
Changed 's3c' to 'samsung' for platform device as well as platform data Moved platform data structure to a separate file
Rectified coding style related errorsChanges from v1:
Rebased patches to latest usb-next branch
Changed the name 'sec_usbphy' to 'samsung_usbphy'This patch set introduces a phy driver for samsung SoCs. It uses the existing
transceiver infrastructure to provide phy control functions. Use of this driver
can be extended for usb host phy as well.Quoted 2 lines
Quoted 2 lines
How can you support usb host phy? I cannot choose to use which phy when call init or shutdown of phy at current phy framework.
correct. Curretly that's not supported. We are trying to come up with proper DeviceTree bindings to allow that. Kishon has been working on providing
devm_usb_get_phy_by_phandle()would should help achieving what you need.Quoted 3 lines
If you are talking about choosing between PHY0 (for device) and PHY1 (for host), I think you can make use of the flags available in
usb_phyto pass that information to phy driver and that can be handled there.
Quoted 7 lines
I rather you didn't do it that way. Those flags are used to pass features to the PHY. See
drivers/usb/otg/ulpi.c, for instance.Quoted 2 lines
This is just one way I have successfully implement two different phy control. There might be a better way to do that.
I guess using DT phandles is the way to go here.
off-course! That is why I haven't included host support as of now.
Praveen
Quoted 3 lines
--
balbi