diff options
Diffstat (limited to 'patches.tizen/0011-usb-phy-samsung-Pass-set_isolation-callback-through-.patch')
-rw-r--r-- | patches.tizen/0011-usb-phy-samsung-Pass-set_isolation-callback-through-.patch | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/patches.tizen/0011-usb-phy-samsung-Pass-set_isolation-callback-through-.patch b/patches.tizen/0011-usb-phy-samsung-Pass-set_isolation-callback-through-.patch new file mode 100644 index 00000000000..a717f632712 --- /dev/null +++ b/patches.tizen/0011-usb-phy-samsung-Pass-set_isolation-callback-through-.patch @@ -0,0 +1,188 @@ +From 1fd2b2ad555a88707683d0241d2ae71874b553a6 Mon Sep 17 00:00:00 2001 +From: Tomasz Figa <t.figa@samsung.com> +Date: Mon, 25 Mar 2013 16:40:52 +0100 +Subject: [PATCH 0011/1302] usb: phy: samsung: Pass set_isolation callback + through driver data + +This patch extends driver data structure with set_isolation callback, +which allows to remove the need for checking for SoC type in a switch +statement. + +Signed-off-by: Tomasz Figa <t.figa@samsung.com> +Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> +Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com> +--- + drivers/usb/phy/phy-samsung-usb.c | 36 ++++++++---------------------------- + drivers/usb/phy/phy-samsung-usb.h | 4 +++- + drivers/usb/phy/phy-samsung-usb2.c | 11 +++++++---- + drivers/usb/phy/phy-samsung-usb3.c | 7 +++++-- + 4 files changed, 23 insertions(+), 35 deletions(-) + +diff --git a/drivers/usb/phy/phy-samsung-usb.c b/drivers/usb/phy/phy-samsung-usb.c +index c40ea32..7a1ed90 100644 +--- a/drivers/usb/phy/phy-samsung-usb.c ++++ b/drivers/usb/phy/phy-samsung-usb.c +@@ -73,7 +73,7 @@ EXPORT_SYMBOL_GPL(samsung_usbphy_parse_dt); + * Here 'on = true' would mean USB PHY block is isolated, hence + * de-activated and vice-versa. + */ +-void samsung_usbphy_set_isolation(struct samsung_usbphy *sphy, bool on) ++void samsung_usbphy_set_isolation_4210(struct samsung_usbphy *sphy, bool on) + { + void __iomem *reg = NULL; + u32 reg_val; +@@ -84,32 +84,12 @@ void samsung_usbphy_set_isolation(struct samsung_usbphy *sphy, bool on) + return; + } + +- switch (sphy->drv_data->cpu_type) { +- case TYPE_S3C64XX: +- /* +- * Do nothing: We will add here once S3C64xx goes for DT support +- */ +- break; +- case TYPE_EXYNOS4210: +- /* +- * Fall through since exynos4210 and exynos5250 have similar +- * register architecture: two separate registers for host and +- * device phy control with enable bit at position 0. +- */ +- case TYPE_EXYNOS5250: +- if (sphy->phy_type == USB_PHY_TYPE_DEVICE) { +- reg = sphy->pmuregs + +- sphy->drv_data->devphy_reg_offset; +- en_mask = sphy->drv_data->devphy_en_mask; +- } else if (sphy->phy_type == USB_PHY_TYPE_HOST) { +- reg = sphy->pmuregs + +- sphy->drv_data->hostphy_reg_offset; +- en_mask = sphy->drv_data->hostphy_en_mask; +- } +- break; +- default: +- dev_err(sphy->dev, "Invalid SoC type\n"); +- return; ++ if (sphy->phy_type == USB_PHY_TYPE_DEVICE) { ++ reg = sphy->pmuregs + sphy->drv_data->devphy_reg_offset; ++ en_mask = sphy->drv_data->devphy_en_mask; ++ } else if (sphy->phy_type == USB_PHY_TYPE_HOST) { ++ reg = sphy->pmuregs + sphy->drv_data->hostphy_reg_offset; ++ en_mask = sphy->drv_data->hostphy_en_mask; + } + + reg_val = readl(reg); +@@ -121,7 +101,7 @@ void samsung_usbphy_set_isolation(struct samsung_usbphy *sphy, bool on) + + writel(reg_val, reg); + } +-EXPORT_SYMBOL_GPL(samsung_usbphy_set_isolation); ++EXPORT_SYMBOL_GPL(samsung_usbphy_set_isolation_4210); + + /* + * Configure the mode of working of usb-phy here: HOST/DEVICE. +diff --git a/drivers/usb/phy/phy-samsung-usb.h b/drivers/usb/phy/phy-samsung-usb.h +index 0336f6b..5203784 100644 +--- a/drivers/usb/phy/phy-samsung-usb.h ++++ b/drivers/usb/phy/phy-samsung-usb.h +@@ -271,6 +271,7 @@ struct samsung_usbphy_drvdata { + u32 devphy_reg_offset; + u32 hostphy_reg_offset; + int (*rate_to_clksel)(struct samsung_usbphy *, unsigned long); ++ void (*set_isolation)(struct samsung_usbphy *, bool); + }; + + /* +@@ -323,7 +324,8 @@ static inline const struct samsung_usbphy_drvdata + } + + extern int samsung_usbphy_parse_dt(struct samsung_usbphy *sphy); +-extern void samsung_usbphy_set_isolation(struct samsung_usbphy *sphy, bool on); ++extern void samsung_usbphy_set_isolation_4210(struct samsung_usbphy *sphy, ++ bool on); + extern void samsung_usbphy_cfg_sel(struct samsung_usbphy *sphy); + extern int samsung_usbphy_set_type(struct usb_phy *phy, + enum samsung_usb_phy_type phy_type); +diff --git a/drivers/usb/phy/phy-samsung-usb2.c b/drivers/usb/phy/phy-samsung-usb2.c +index be6031d..a01247e 100644 +--- a/drivers/usb/phy/phy-samsung-usb2.c ++++ b/drivers/usb/phy/phy-samsung-usb2.c +@@ -284,8 +284,8 @@ static int samsung_usb2phy_init(struct usb_phy *phy) + /* Disable phy isolation */ + if (sphy->plat && sphy->plat->pmu_isolation) + sphy->plat->pmu_isolation(false); +- else +- samsung_usbphy_set_isolation(sphy, false); ++ else if (sphy->drv_data->set_isolation) ++ sphy->drv_data->set_isolation(sphy, false); + + /* Selecting Host/OTG mode; After reset USB2.0PHY_CFG: HOST */ + samsung_usbphy_cfg_sel(sphy); +@@ -342,8 +342,8 @@ static void samsung_usb2phy_shutdown(struct usb_phy *phy) + /* Enable phy isolation */ + if (sphy->plat && sphy->plat->pmu_isolation) + sphy->plat->pmu_isolation(true); +- else +- samsung_usbphy_set_isolation(sphy, true); ++ else if (sphy->drv_data->set_isolation) ++ sphy->drv_data->set_isolation(sphy, true); + + spin_unlock_irqrestore(&sphy->lock, flags); + +@@ -442,6 +442,7 @@ static const struct samsung_usbphy_drvdata usb2phy_s3c64xx = { + .cpu_type = TYPE_S3C64XX, + .devphy_en_mask = S3C64XX_USBPHY_ENABLE, + .rate_to_clksel = samsung_usbphy_rate_to_clksel_64xx, ++ .set_isolation = NULL, /* TODO */ + }; + + static const struct samsung_usbphy_drvdata usb2phy_exynos4 = { +@@ -449,6 +450,7 @@ static const struct samsung_usbphy_drvdata usb2phy_exynos4 = { + .devphy_en_mask = EXYNOS_USBPHY_ENABLE, + .hostphy_en_mask = EXYNOS_USBPHY_ENABLE, + .rate_to_clksel = samsung_usbphy_rate_to_clksel_64xx, ++ .set_isolation = samsung_usbphy_set_isolation_4210, + }; + + static struct samsung_usbphy_drvdata usb2phy_exynos5 = { +@@ -456,6 +458,7 @@ static struct samsung_usbphy_drvdata usb2phy_exynos5 = { + .hostphy_en_mask = EXYNOS_USBPHY_ENABLE, + .hostphy_reg_offset = EXYNOS_USBHOST_PHY_CTRL_OFFSET, + .rate_to_clksel = samsung_usbphy_rate_to_clksel_4x12, ++ .set_isolation = samsung_usbphy_set_isolation_4210, + }; + + #ifdef CONFIG_OF +diff --git a/drivers/usb/phy/phy-samsung-usb3.c b/drivers/usb/phy/phy-samsung-usb3.c +index ec44b35..3a30a5e 100644 +--- a/drivers/usb/phy/phy-samsung-usb3.c ++++ b/drivers/usb/phy/phy-samsung-usb3.c +@@ -184,7 +184,8 @@ static int samsung_usb3phy_init(struct usb_phy *phy) + samsung_usbphy_set_type(&sphy->phy, USB_PHY_TYPE_DEVICE); + + /* Disable phy isolation */ +- samsung_usbphy_set_isolation(sphy, false); ++ if (sphy->drv_data->set_isolation) ++ sphy->drv_data->set_isolation(sphy, false); + + /* Initialize usb phy registers */ + samsung_exynos5_usb3phy_enable(sphy); +@@ -221,7 +222,8 @@ static void samsung_usb3phy_shutdown(struct usb_phy *phy) + samsung_exynos5_usb3phy_disable(sphy); + + /* Enable phy isolation */ +- samsung_usbphy_set_isolation(sphy, true); ++ if (sphy->drv_data->set_isolation) ++ sphy->drv_data->set_isolation(sphy, true); + + spin_unlock_irqrestore(&sphy->lock, flags); + +@@ -304,6 +306,7 @@ static struct samsung_usbphy_drvdata usb3phy_exynos5 = { + .cpu_type = TYPE_EXYNOS5250, + .devphy_en_mask = EXYNOS_USBPHY_ENABLE, + .rate_to_clksel = samsung_usbphy_rate_to_clksel_4x12, ++ .set_isolation = samsung_usbphy_set_isolation_4210, + }; + + #ifdef CONFIG_OF +-- +1.8.3.2 + |