ARM: Exynos/S3C64XX: usb phy driver support for S3C64XX and EXYNOS4210
v8 cover ARM: Exynos/S3C64XX: usb phy driver support for S3C64XX and EXYNOS4210
This patch series enables usb phy driver for S3C64XX and EXYNOS4210. The phy driver patches are already sent to linux-usb.
Changes From v7:
Resolved build errors with s3c6400_defconfig, s5pv210_defconfig and exynos_defconfig.
Tested with all other samsung configs as well.
Reformed PATCH 3 (PATCH 5 of last series) with proper subject. Separated these arch patches from the driver patches.
Changes from v4:
Changed the platform data code to use __initdata
Changes from v2:
Changed 's3c' to 'samsung' for platform device as well as platform data Moved platform data structure to a separate file
Praveen Paneri (3):
ARM: S3C64XX: Removing old phy setup code
ARM: S3C64XX: Enabling samsung-usbphy driver
ARM: EXYNOS: Enabling samsung-usbphy driver for EXYNOS4210
arch/arm/boot/dts/exynos4210-smdkv310.dts | 5 ++ arch/arm/mach-exynos/Kconfig | 1 + 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 | 10 ++- arch/arm/mach-s3c64xx/mach-smartq.c | 11 +++- arch/arm/mach-s3c64xx/mach-smdk6410.c | 10 ++- arch/arm/mach-s3c64xx/setup-usb-phy.c | 79 ++----------------------- arch/arm/plat-samsung/devs.c | 28 +++++++++ arch/arm/plat-samsung/include/plat/devs.h | 1 + arch/arm/plat-samsung/include/plat/usb-phy.h | 1 + 13 files changed, 89 insertions(+), 81 deletions(-)
PATCH v8 1/3 ARM: S3C64XX: Removing old phy setup code
This 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>
@@ -805,7 +804,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 ) {
@@ -831,7 +829,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 v8 1/3 ARM: S3C64XX: Removing old phy setup code
Hi Praveen,
Quoted 176 lines · On Wednesday 14 of November 2012 16:15:36 Praveen Paneri wrote:
This 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 ofplatform_datadefined for hsotg. That can be removed once all the SoCs start using the new transceiver for usb phy setup.Signed-off-by Praveen Paneri <[email protected]>--- 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(-)
(quoted diff) +0
-0
b/arch/arm/mach-s3c64xx/mach-crag6410.cindex 2abe95d..48f4a2d 100644arch/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> @@ -805,7 +804,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 ) {@@ -831,7 +829,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));(quoted diff) +0
-0
b/arch/arm/mach-s3c64xx/mach-smartq.cindex c6d7390..59bb34c 100644arch/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);(quoted diff) +0
-0
b/arch/arm/mach-s3c64xx/mach-smdk6410.cindex da1a771..123f452 100644arch/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);(quoted diff) +0
-0
b/arch/arm/mach-s3c64xx/setup-usb-phy.cindex f6757e0..7a09553 100644arch/arm/mach-s3c64xx/setup-usb-phy.c +0
-17@@ -9,82 +9,3 @@* */ -#include <linux/clk.h> -#include <linux/delay.h> -#include <linux/err.h> -#include <linux/io.h> -#include <linux/platform_device.h> -#include <mach/map.h> -#include <mach/regs-sys.h> -#include <plat/cpu.h> -#include <plat/regs-usb-hsotg-phy.h> -#include <plat/usb-phy.h> - -static int s3c_usb_otgphy_init (struct platform_device *pdev) -{ -struct clk *xusbxti; -u32 phyclk; - - writel(readl(S3C64XX_OTHERS) | S3C64XX_OTHERS_USBMASK,
S3C64XX_OTHERS); -arch/arm/mach-s3c64xx/setup-usb-phy.c +0
-42-/* set clock frequency for PLL */ - phyclk =readl (S3C_PHYCLK ) & ~S3C_PHYCLK_CLKSEL_MASK ; - - xusbxti =clk_get (&pdev->dev,"xusbxti" ); -if (xusbxti && !IS_ERR (xusbxti)) { -switch (clk_get_rate (xusbxti)) { -case 12 *MHZ : - phyclk |=S3C_PHYCLK_CLKSEL_12M ; -break ; -case 24 *MHZ : - phyclk |=S3C_PHYCLK_CLKSEL_24M ; -break ; -default : -case 48 *MHZ : -/* default reference clock */ -break ; - } -clk_put (xusbxti); - } - -/* TODO: select external clock/oscillator */ -writel (phyclk |S3C_PHYCLK_CLK_FORCE ,S3C_PHYCLK ); - -/* set to normal OTG PHY */ -writel ((readl (S3C_PHYPWR ) & ~S3C_PHYPWR_NORMAL_MASK ),S3C_PHYPWR ); -mdelay (1 ); - -/* reset OTG PHY and Link */ -writel (S3C_RSTCON_PHY |S3C_RSTCON_HCLK |S3C_RSTCON_PHYCLK , -S3C_RSTCON ); -udelay (20 );/* at-least 10uS */ -writel (0 ,S3C_RSTCON ); - -return 0 ; -} - -static int s3c_usb_otgphy_exit (struct platform_device *pdev) -{ -writel ((readl (S3C_PHYPWR ) |S3C_PHYPWR_ANALOG_POWERDOWN | -S3C_PHYPWR_OTG_DISABLE ),S3C_PHYPWR ); - - writel(readl(S3C64XX_OTHERS) & ~S3C64XX_OTHERS_USBMASK,
S3C64XX_OTHERS); -arch/arm/mach-s3c64xx/setup-usb-phy.c +0
-8-return 0 ; -} - -int s5p_usb_phy_init (struct platform_device *pdev,int type) -{ -if (type ==S5P_USB_PHY_DEVICE ) -return s3c_usb_otgphy_init (pdev); -
arch/arm/mach-s3c64xx/setup-usb-phy.c line 90
Quoted 10 lines
arch/arm/mach-s3c64xx/setup-usb-phy.c +0
-10-return -EINVAL ; -} - -int s5p_usb_phy_exit (struct platform_device *pdev,int type) -{ -if (type ==S5P_USB_PHY_DEVICE ) -return s3c_usb_otgphy_exit (pdev); - -return -EINVAL ; -}
This patch will break git bisect, because applying it breaks USB gadget on s3c64xx until patch 2 gets applied.
I suggest you to add usb phy support to s3c64xx first and then remove the old code.
Best regards,
Tomasz Figa
PATCH v8 1/3 ARM: S3C64XX: Removing old phy setup code
Quoted 193 lines · Tomasz Figa
Hi Praveen,
Quoted 176 lines · On Wednesday 14 of November 2012 16:15:36 Praveen Paneri wrote:
This 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 ofplatform_datadefined for hsotg. That can be removed once all the SoCs start using the new transceiver for usb phy setup.Signed-off-by Praveen Paneri <[email protected]>--- 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(-)
(quoted diff) +0
-0
b/arch/arm/mach-s3c64xx/mach-crag6410.cindex 2abe95d..48f4a2d 100644arch/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> @@ -805,7 +804,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 ) {@@ -831,7 +829,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));(quoted diff) +0
-0
b/arch/arm/mach-s3c64xx/mach-smartq.cindex c6d7390..59bb34c 100644arch/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);(quoted diff) +0
-0
b/arch/arm/mach-s3c64xx/mach-smdk6410.cindex da1a771..123f452 100644arch/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);(quoted diff) +0
-0
b/arch/arm/mach-s3c64xx/setup-usb-phy.cindex f6757e0..7a09553 100644arch/arm/mach-s3c64xx/setup-usb-phy.c +0
-17@@ -9,82 +9,3 @@* */ -#include <linux/clk.h> -#include <linux/delay.h> -#include <linux/err.h> -#include <linux/io.h> -#include <linux/platform_device.h> -#include <mach/map.h> -#include <mach/regs-sys.h> -#include <plat/cpu.h> -#include <plat/regs-usb-hsotg-phy.h> -#include <plat/usb-phy.h> - -static int s3c_usb_otgphy_init (struct platform_device *pdev) -{ -struct clk *xusbxti; -u32 phyclk; - - writel(readl(S3C64XX_OTHERS) | S3C64XX_OTHERS_USBMASK,
S3C64XX_OTHERS); -arch/arm/mach-s3c64xx/setup-usb-phy.c +0
-42-/* set clock frequency for PLL */ - phyclk =readl (S3C_PHYCLK ) & ~S3C_PHYCLK_CLKSEL_MASK ; - - xusbxti =clk_get (&pdev->dev,"xusbxti" ); -if (xusbxti && !IS_ERR (xusbxti)) { -switch (clk_get_rate (xusbxti)) { -case 12 *MHZ : - phyclk |=S3C_PHYCLK_CLKSEL_12M ; -break ; -case 24 *MHZ : - phyclk |=S3C_PHYCLK_CLKSEL_24M ; -break ; -default : -case 48 *MHZ : -/* default reference clock */ -break ; - } -clk_put (xusbxti); - } - -/* TODO: select external clock/oscillator */ -writel (phyclk |S3C_PHYCLK_CLK_FORCE ,S3C_PHYCLK ); - -/* set to normal OTG PHY */ -writel ((readl (S3C_PHYPWR ) & ~S3C_PHYPWR_NORMAL_MASK ),S3C_PHYPWR ); -mdelay (1 ); - -/* reset OTG PHY and Link */ -writel (S3C_RSTCON_PHY |S3C_RSTCON_HCLK |S3C_RSTCON_PHYCLK , -S3C_RSTCON ); -udelay (20 );/* at-least 10uS */ -writel (0 ,S3C_RSTCON ); - -return 0 ; -} - -static int s3c_usb_otgphy_exit (struct platform_device *pdev) -{ -writel ((readl (S3C_PHYPWR ) |S3C_PHYPWR_ANALOG_POWERDOWN | -S3C_PHYPWR_OTG_DISABLE ),S3C_PHYPWR ); - - writel(readl(S3C64XX_OTHERS) & ~S3C64XX_OTHERS_USBMASK,
S3C64XX_OTHERS); -arch/arm/mach-s3c64xx/setup-usb-phy.c +0
-8-return 0 ; -} - -int s5p_usb_phy_init (struct platform_device *pdev,int type) -{ -if (type ==S5P_USB_PHY_DEVICE ) -return s3c_usb_otgphy_init (pdev); -arch/arm/mach-s3c64xx/setup-usb-phy.c line 90
Quoted 10 lines
arch/arm/mach-s3c64xx/setup-usb-phy.c +0
-10-return -EINVAL ; -} - -int s5p_usb_phy_exit (struct platform_device *pdev,int type) -{ -if (type ==S5P_USB_PHY_DEVICE ) -return s3c_usb_otgphy_exit (pdev); - -return -EINVAL ; -}This patch will break git bisect, because applying it breaks USB gadget on s3c64xx until patch 2 gets applied.
Quoted 2 lines
I suggest you to add usb phy support to s3c64xx first and then remove the old code.
Will do that.
Quoted 8 lines
Best regards,
Tomasz Figa--
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 v8 2/3 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 | 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 | 14 +++++++++++++ arch/arm/plat-samsung/devs.c | 28 ++++++++++++++++++++++++++ arch/arm/plat-samsung/include/plat/devs.h | 1 + arch/arm/plat-samsung/include/plat/usb-phy.h | 1 + 8 files changed, 68 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 +7 -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>
@@ -69,6 +70,7 @@#include <plat/adc.h> #include <linux/platform_data/i2c-s3c2410.h> #include <plat/pm.h> +#include <plat/usb-phy.h> #include "common.h"
@@ -353,6 +355,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,
@@ -804,6 +807,9 @@ static const struct gpio_led_platform_data gpio_leds_pdata = { .num_leds = ARRAY_SIZE(gpio_leds), }; +static struct samsung_usbphy_data crag6410_usbphy_pdata__initdata = { + .pmu_isolation = s5p_usb_phy_pmu_isolation, +};static void __init crag6410_machine_init (void ) {
@@ -829,6 +835,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 +8 -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>
@@ -36,6 +37,7 @@#include <linux/platform_data/usb-ohci-s3c2410.h> #include <plat/sdhci.h> #include <linux/platform_data/touchscreen-s3c2410.h> +#include <plat/usb-phy.h> #include <video/platform_lcd.h>
@@ -234,6 +236,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 +383,14 @@ void __init smartq_map_io(void)smartq_lcd_mode_set (); } +static struct samsung_usbphy_data smartq_usbphy_pdata__initdata = { + .pmu_isolation = s5p_usb_phy_pmu_isolation, +}; +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 +7 -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>
@@ -72,6 +73,7 @@#include <linux/platform_data/touchscreen-s3c2410.h> #include <plat/keypad.h> #include <plat/backlight.h> +#include <plat/usb-phy.h> #include "common.h"
@@ -263,6 +265,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 +629,9 @@ static struct platform_pwm_backlight_data smdk6410_bl_data = { .pwm_id = 1, }; +static struct samsung_usbphy_data smdk6410_usbphy_pdata__initdata = { + .pmu_isolation = s5p_usb_phy_pmu_isolation, +};static void __init smdk6410_map_io (void ) {
@@ -655,6 +661,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 +28 -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 <media/s5p_hdmi.h>
@@ -1367,6 +1368,30 @@ struct platform_device s5p_device_mixer = {/* USB */ +#ifdef CONFIG_ARCH_S3C64XX +/* 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) +{ +s3c_set_platdata (pd,sizeof (struct samsung_usbphy_data ), + &samsung_device_usbphy); +} +#endif +#ifdef CONFIG_S3C_DEV_USB_HOST static struct resource s3c_usb_resource[] = { [0] = DEFINE_RES_MEM(S3C_PA_USBHOST, SZ_256),
@@ -1473,6 +1498,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;
@@ -1485,6 +1512,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
@@ -136,6 +136,7 @@ extern struct platform_device exynos4_device_spdif;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 v8 2/3 ARM: S3C64XX: Enabling samsung-usbphy driver
Hi Praveen,
Quoted 66 lines · On Wednesday 14 of November 2012 16:15:37 Praveen Paneri wrote:
Adding platform device for samsung-usbphy driver. Enabling it for s3c64xx based machines using s3c-hsotg.
Signed-off-by Praveen Paneri <[email protected]>--- 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 | 14 +++++++++++++ arch/arm/plat-samsung/devs.c | 28 ++++++++++++++++++++++++++ arch/arm/plat-samsung/include/plat/devs.h | 1 + arch/arm/plat-samsung/include/plat/usb-phy.h | 1 + 8 files changed, 68 insertions(+), 0 deletions(-)(quoted diff) +0
-0
b/arch/arm/mach-s3c64xx/include/mach/map.hindex 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_SPI0(quoted diff) +0
-0
b/arch/arm/mach-s3c64xx/mach-crag6410.cindex 48f4a2d..c602379 100644arch/arm/mach-s3c64xx/mach-crag6410.c +3
-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> @@ -69,6 +70,7 @@#include <plat/adc.h> #include <linux/platform_data/i2c-s3c2410.h> #include <plat/pm.h> +#include <plat/usb-phy.h> #include "common.h" @@ -353,6 +355,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 812
Quoted 6 lines
arch/arm/mach-s3c64xx/mach-crag6410.c +3
-0@@ -804,6 +807,9 @@ static const struct gpio_led_platform_data gpio_leds_pdata = { .num_leds = ARRAY_SIZE(gpio_leds), }; +static struct samsung_usbphy_data crag6410_usbphy_pdata__initdata = { + .pmu_isolation = s5p_usb_phy_pmu_isolation, +};
Why not define default platform data somewhere and always use it for s3c64xx, without redefining the same structure in all boards?
Quoted 111 lines
arch/arm/mach-s3c64xx/mach-crag6410.c +1
-0static void __init crag6410_machine_init (void ) {@@ -829,6 +835,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));(quoted diff) +0
-0
b/arch/arm/mach-s3c64xx/mach-smartq.cindex 59bb34c..f18a0ab 100644arch/arm/mach-s3c64xx/mach-smartq.c +8
-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> @@ -36,6 +37,7 @@#include <linux/platform_data/usb-ohci-s3c2410.h> #include <plat/sdhci.h> #include <linux/platform_data/touchscreen-s3c2410.h> +#include <plat/usb-phy.h> #include <video/platform_lcd.h> @@ -234,6 +236,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 +383,14 @@ void __init smartq_map_io(void)smartq_lcd_mode_set (); } +static struct samsung_usbphy_data smartq_usbphy_pdata__initdata = { + .pmu_isolation = s5p_usb_phy_pmu_isolation, +}; +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);(quoted diff) +0
-0
b/arch/arm/mach-s3c64xx/mach-smdk6410.cindex 123f452..00e46a6 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> @@ -72,6 +73,7 @@#include <linux/platform_data/touchscreen-s3c2410.h> #include <plat/keypad.h> #include <plat/backlight.h> +#include <plat/usb-phy.h> #include "common.h" @@ -263,6 +265,7 @@ static struct samsung_keypad_platdata
smdk6410_keypad_data__initdata= { static structmap_descsmdk6410_iodesc[] = {};static struct
platform_device*smdk6410_devices[]__initdata= {arch/arm/mach-s3c64xx/mach-smdk6410.c +5
-0+ &samsung_device_usbphy,#ifdef CONFIG_SMDK6410_SD_CH0 &s3c_device_hsmmc0,#endif @@ -626,6 +629,9 @@ static struct platform_pwm_backlight_data smdk6410_bl_data = { .pwm_id = 1, }; +static struct samsung_usbphy_data smdk6410_usbphy_pdata__initdata = { + .pmu_isolation = s5p_usb_phy_pmu_isolation, +};static void __init smdk6410_map_io (void ) {@@ -655,6 +661,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);(quoted diff) +0
-0
b/arch/arm/mach-s3c64xx/setup-usb-phy.cindex 7a09553..3aee778 100644arch/arm/mach-s3c64xx/setup-usb-phy.c +3
-0@@ -9,3 +9,17 @@* */ +#include <linux/io.h> +#include <mach/map.h> +#include <mach/regs-sys.h>
arch/arm/mach-s3c64xx/setup-usb-phy.c line 24
Quoted 10 lines
arch/arm/mach-s3c64xx/setup-usb-phy.c +10
-0+ +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 ); + }
nitpick: Unnecessary braces for one line if/else.
Quoted 29 lines
arch/arm/mach-s3c64xx/setup-usb-phy.c +1
-0+}arch/arm/plat-samsung/devs.c +13
-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 <media/s5p_hdmi.h> @@ -1367,6 +1368,30 @@ struct platform_device s5p_device_mixer = {/* USB */ +#ifdef CONFIG_ARCH_S3C64XX +/* 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",
arch/arm/plat-samsung/devs.c struct platform_device s5p_device_mixer = { · line 1392
Quoted 10 lines
arch/arm/plat-samsung/devs.c +10
-0+ .id = -1, + .num_resources = ARRAY_SIZE(samsung_usbphy_resource), + .resource = samsung_usbphy_resource, +}; + +void __init samsung_usbphy_set_pdata (struct samsung_usbphy_data *pd) +{ +s3c_set_platdata (pd,sizeof (struct samsung_usbphy_data ), + &samsung_device_usbphy); +}
This is strange. samsung_usbphy_set_pdata is declared unconditionally in linux/platform_data/samsung-usbphy.h , but it's defined only for S3C64XX?
Maybe the condition should be CONFIG_SAMSUNG_USBPHY not CONFIG_ARCH_S3C64XX and in case of CONFIG_SAMSUNG_USBPHY disabled a dummy inline samsung_usphy_set_pdata should be defined in the header?
Best regards,
Tomasz Figa
PATCH v8 2/3 ARM: S3C64XX: Enabling samsung-usbphy driver
Quoted 246 lines · Tomasz Figa
Hi Praveen,
Quoted 66 lines · On Wednesday 14 of November 2012 16:15:37 Praveen Paneri wrote:
Adding platform device for samsung-usbphy driver. Enabling it for s3c64xx based machines using s3c-hsotg.
Signed-off-by Praveen Paneri <[email protected]>--- 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 | 14 +++++++++++++ arch/arm/plat-samsung/devs.c | 28 ++++++++++++++++++++++++++ arch/arm/plat-samsung/include/plat/devs.h | 1 + arch/arm/plat-samsung/include/plat/usb-phy.h | 1 + 8 files changed, 68 insertions(+), 0 deletions(-)(quoted diff) +0
-0
b/arch/arm/mach-s3c64xx/include/mach/map.hindex 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_SPI0(quoted diff) +0
-0
b/arch/arm/mach-s3c64xx/mach-crag6410.cindex 48f4a2d..c602379 100644arch/arm/mach-s3c64xx/mach-crag6410.c +3
-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> @@ -69,6 +70,7 @@#include <plat/adc.h> #include <linux/platform_data/i2c-s3c2410.h> #include <plat/pm.h> +#include <plat/usb-phy.h> #include "common.h" @@ -353,6 +355,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 812
Quoted 6 lines
arch/arm/mach-s3c64xx/mach-crag6410.c +3
-0@@ -804,6 +807,9 @@ static const struct gpio_led_platform_data gpio_leds_pdata = { .num_leds = ARRAY_SIZE(gpio_leds), }; +static struct samsung_usbphy_data crag6410_usbphy_pdata__initdata = { + .pmu_isolation = s5p_usb_phy_pmu_isolation, +};Why not define default platform data somewhere and always use it for s3c64xx, without redefining the same structure in all boards?
Quoted 111 lines
arch/arm/mach-s3c64xx/mach-crag6410.c +1
-0static void __init crag6410_machine_init (void ) {@@ -829,6 +835,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));(quoted diff) +0
-0
b/arch/arm/mach-s3c64xx/mach-smartq.cindex 59bb34c..f18a0ab 100644arch/arm/mach-s3c64xx/mach-smartq.c +8
-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> @@ -36,6 +37,7 @@#include <linux/platform_data/usb-ohci-s3c2410.h> #include <plat/sdhci.h> #include <linux/platform_data/touchscreen-s3c2410.h> +#include <plat/usb-phy.h> #include <video/platform_lcd.h> @@ -234,6 +236,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 +383,14 @@ void __init smartq_map_io(void)smartq_lcd_mode_set (); } +static struct samsung_usbphy_data smartq_usbphy_pdata__initdata = { + .pmu_isolation = s5p_usb_phy_pmu_isolation, +}; +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);(quoted diff) +0
-0
b/arch/arm/mach-s3c64xx/mach-smdk6410.cindex 123f452..00e46a6 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> @@ -72,6 +73,7 @@#include <linux/platform_data/touchscreen-s3c2410.h> #include <plat/keypad.h> #include <plat/backlight.h> +#include <plat/usb-phy.h> #include "common.h" @@ -263,6 +265,7 @@ static struct samsung_keypad_platdata
smdk6410_keypad_data__initdata= { static structmap_descsmdk6410_iodesc[] = {};static struct
platform_device*smdk6410_devices[]__initdata= {arch/arm/mach-s3c64xx/mach-smdk6410.c +5
-0+ &samsung_device_usbphy,#ifdef CONFIG_SMDK6410_SD_CH0 &s3c_device_hsmmc0,#endif @@ -626,6 +629,9 @@ static struct platform_pwm_backlight_data smdk6410_bl_data = { .pwm_id = 1, }; +static struct samsung_usbphy_data smdk6410_usbphy_pdata__initdata = { + .pmu_isolation = s5p_usb_phy_pmu_isolation, +};static void __init smdk6410_map_io (void ) {@@ -655,6 +661,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);(quoted diff) +0
-0
b/arch/arm/mach-s3c64xx/setup-usb-phy.cindex 7a09553..3aee778 100644arch/arm/mach-s3c64xx/setup-usb-phy.c +3
-0@@ -9,3 +9,17 @@* */ +#include <linux/io.h> +#include <mach/map.h> +#include <mach/regs-sys.h> arch/arm/mach-s3c64xx/setup-usb-phy.c line 24
Quoted 10 lines
arch/arm/mach-s3c64xx/setup-usb-phy.c +10
-0+ +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 ); + }nitpick: Unnecessary braces for one line if/else.
Quoted 29 lines
arch/arm/mach-s3c64xx/setup-usb-phy.c +1
-0+}arch/arm/plat-samsung/devs.c +13
-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 <media/s5p_hdmi.h> @@ -1367,6 +1368,30 @@ struct platform_device s5p_device_mixer = {/* USB */ +#ifdef CONFIG_ARCH_S3C64XX +/* 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",arch/arm/plat-samsung/devs.c struct platform_device s5p_device_mixer = { · line 1392
Quoted 10 lines
arch/arm/plat-samsung/devs.c +10
-0+ .id = -1, + .num_resources = ARRAY_SIZE(samsung_usbphy_resource), + .resource = samsung_usbphy_resource, +}; + +void __init samsung_usbphy_set_pdata (struct samsung_usbphy_data *pd) +{ +s3c_set_platdata (pd,sizeof (struct samsung_usbphy_data ), + &samsung_device_usbphy); +}This is strange.
samsung_usbphy_set_pdatais declared unconditionally inlinux/platform_data/samsung-usbphy.h, but it's defined only for S3C64XX?
Quoted 3 lines
Maybe the condition should be
CONFIG_SAMSUNG_USBPHYnotCONFIG_ARCH_S3C64XXand in case ofCONFIG_SAMSUNG_USBPHYdisabled a dummy inlinesamsung_usphy_set_pdatashould be defined in the header?
Will update accordingly
Thanks,
Praveen
Quoted 8 lines
Best regards,
Tomasz Figa--
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 v8 3/3 ARM: EXYNOS: Enabling samsung-usbphy driver for EXYNOS4210
In reply to Praveen PaneriAdding usbphy node for Exynos4210 along with the platform data.
--- arch/arm/boot/dts/exynos4210-smdkv310.dts | 5 +++++ arch/arm/mach-exynos/Kconfig | 1 + 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 +++++++++++++ 5 files changed, 28 insertions(+), 0 deletions(-)
arch/arm/boot/dts/exynos4210-smdkv310.dts +5 -0
@@ -59,6 +59,11 @@ status = "okay"; }; + usbphy@125B0000 { + compatible = "samsung,exynos4210-usbphy"; + reg = <0x125B0000 0x100>; + }; + keypad@100A0000 { samsung,keypad-num-rows = <2>; samsung,keypad-num-columns = <8>;
arch/arm/mach-exynos/Kconfig +1 -0
@@ -410,6 +410,7 @@ config MACH_EXYNOS4_DT select PINCTRL select PINCTRL_EXYNOS4 select USE_OF + select EXYNOS4_SETUP_USB_PHY help Machine support for Samsung Exynos4 machine with device tree enabled. Select this if a fdt blob is available for the Exynos4 SoC based board.
arch/arm/mach-exynos/include/mach/map.h +1 -0
@@ -244,6 +244,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
@@ -79,6 +85,8 @@ static const struct of_dev_auxdata exynos4_auxdata_lookup[] __initconst = {OF_DEV_AUXDATA ("arm,pl330" ,EXYNOS4_PA_PDMA1 ,"dma-pl330.1" ,NULL ),OF_DEV_AUXDATA ("samsung,exynos4210-tmu" ,EXYNOS4_PA_TMU ,"exynos-tmu" ,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
PATCH v8 3/3 ARM: EXYNOS: Enabling samsung-usbphy driver for EXYNOS4210
Hi Praveen,
Quoted 83 lines · On Wednesday 14 of November 2012 16:15:38 Praveen Paneri wrote:
Adding usbphy node for Exynos4210 along with the platform data.
Signed-off-by Praveen Paneri <[email protected]>--- arch/arm/boot/dts/exynos4210-smdkv310.dts | 5 +++++ arch/arm/mach-exynos/Kconfig | 1 + 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 +++++++++++++ 5 files changed, 28 insertions(+), 0 deletions(-)(quoted diff) +0
-0
b/arch/arm/boot/dts/exynos4210-smdkv310.dtsindex 9b23a82..550903a 100644arch/arm/boot/dts/exynos4210-smdkv310.dts +5
-0@@ -59,6 +59,11 @@ status = "okay"; }; + usbphy at 125B0000 { + compatible = "samsung,exynos4210-usbphy"; + reg = <0x125B0000 0x100>; + }; + keypad at 100A0000 { samsung,keypad-num-rows = <2>; samsung,keypad-num-columns = <8>;arch/arm/mach-exynos/Kconfig +1
-0@@ -410,6 +410,7 @@ config MACH_EXYNOS4_DT select PINCTRL select PINCTRL_EXYNOS4 select USE_OF + select EXYNOS4_SETUP_USB_PHY help Machine support for Samsung Exynos4 machine with device treeenabled. Select this if a fdt blob is available for the Exynos4 SoC based board. diff --git
a/arch/arm/mach-exynos/include/mach/map.hb/arch/arm/mach-exynos/include/mach/map.hindex ef4958b..e64fe1c 100644arch/arm/mach-exynos/include/mach/map.h +1
-0@@ -244,6 +244,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(quoted diff) +0
-0
b/arch/arm/mach-exynos/mach-exynos4-dt.cindex 8858068..f7887e5 100644arch/arm/mach-exynos/mach-exynos4-dt.c +6
-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 @@ -79,6 +85,8 @@ static const struct
of_dev_auxdataexynos4_auxdata_lookup[]__initconst= {OF_DEV_AUXDATA("arm,pl330", EXYNOS4_PA_PDMA1, "dma-pl330.1", NULL), OF_DEV_AUXDATA("samsung,exynos4210-tmu",EXYNOS4_PA_TMU,
arch/arm/mach-exynos/mach-exynos4-dt.c static const struct of_dev_auxdata exynos4_auxdata_lookup[] __initconst = { · line 89
Quoted 3 lines
arch/arm/mach-exynos/mach-exynos4-dt.c +2
-0"exynos-tmu", NULL), +OF_DEV_AUXDATA ("samsung,exynos4210-usbphy" ,EXYNOS4_PA_HSPHY , + "s3c-usbphy", &exynos4_usbphy_pdata),
You should consider reworking the usb phy driver to avoid the need to specify platform data through of auxdata, because auxdata array in mach- exynos4-dt is going to be removed after including common clock framework support for Exynos4.
Best regards,
Tomasz Figa
PATCH v8 3/3 ARM: EXYNOS: Enabling samsung-usbphy driver for EXYNOS4210
Quoted 86 lines · Tomasz Figa
Hi Praveen,
Quoted 83 lines · On Wednesday 14 of November 2012 16:15:38 Praveen Paneri wrote:
Adding usbphy node for Exynos4210 along with the platform data.
Signed-off-by Praveen Paneri <[email protected]>--- arch/arm/boot/dts/exynos4210-smdkv310.dts | 5 +++++ arch/arm/mach-exynos/Kconfig | 1 + 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 +++++++++++++ 5 files changed, 28 insertions(+), 0 deletions(-)(quoted diff) +0
-0
b/arch/arm/boot/dts/exynos4210-smdkv310.dtsindex 9b23a82..550903a 100644arch/arm/boot/dts/exynos4210-smdkv310.dts +5
-0@@ -59,6 +59,11 @@ status = "okay"; }; + usbphy at 125B0000 { + compatible = "samsung,exynos4210-usbphy"; + reg = <0x125B0000 0x100>; + }; + keypad at 100A0000 { samsung,keypad-num-rows = <2>; samsung,keypad-num-columns = <8>;arch/arm/mach-exynos/Kconfig +1
-0@@ -410,6 +410,7 @@ config MACH_EXYNOS4_DT select PINCTRL select PINCTRL_EXYNOS4 select USE_OF + select EXYNOS4_SETUP_USB_PHY help Machine support for Samsung Exynos4 machine with device treeenabled. Select this if a fdt blob is available for the Exynos4 SoC based board. diff --git
a/arch/arm/mach-exynos/include/mach/map.hb/arch/arm/mach-exynos/include/mach/map.hindex ef4958b..e64fe1c 100644arch/arm/mach-exynos/include/mach/map.h +1
-0@@ -244,6 +244,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(quoted diff) +0
-0
b/arch/arm/mach-exynos/mach-exynos4-dt.cindex 8858068..f7887e5 100644arch/arm/mach-exynos/mach-exynos4-dt.c +6
-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 @@ -79,6 +85,8 @@ static const struct
of_dev_auxdataexynos4_auxdata_lookup[]__initconst= {OF_DEV_AUXDATA("arm,pl330", EXYNOS4_PA_PDMA1, "dma-pl330.1", NULL), OF_DEV_AUXDATA("samsung,exynos4210-tmu",EXYNOS4_PA_TMU,
Quoted 8 lines
arch/arm/mach-exynos/mach-exynos4-dt.c static const struct of_dev_auxdata exynos4_auxdata_lookup[] __initconst = { · line 89
Quoted 3 lines
"exynos-tmu", NULL),arch/arm/mach-exynos/mach-exynos4-dt.c +2
-0+OF_DEV_AUXDATA ("samsung,exynos4210-usbphy" ,EXYNOS4_PA_HSPHY , + "s3c-usbphy", &exynos4_usbphy_pdata),You should consider reworking the usb phy driver to avoid the need to specify platform data through of auxdata, because auxdata array in mach- exynos4-dt is going to be removed after including common clock framework support for Exynos4.
I am aware of this. We had some discussion earlier
https://patchwork.kernel.org/patch/1266221/
Please suggest a way for the same, that will be helpful.
Regards,
Quoted 8 lines
Best regards,
Tomasz Figa--
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