* [PATCH V2 3/3] video: exynos_dp: Use the generic PHY driver
@ 2013-06-28 7:18 ` Jingoo Han
0 siblings, 0 replies; 14+ messages in thread
From: Jingoo Han @ 2013-06-28 7:18 UTC (permalink / raw)
To: linux-arm-kernel, linux-samsung-soc
Cc: 'Kishon Vijay Abraham I',
linux-media, 'Kukjin Kim', 'Sylwester Nawrocki',
'Felipe Balbi', 'Tomasz Figa',
devicetree-discuss, 'Inki Dae', 'Donghwa Lee',
'Kyungmin Park',
'Jean-Christophe PLAGNIOL-VILLARD',
linux-fbdev, 'Jingoo Han'
Use the generic PHY API instead of the platform callback to control
the DP PHY. The 'phy_label' field is added to the platform data
structure to allow PHY lookup on non-dt platforms.
Signed-off-by: Jingoo Han <jg1.han@samsung.com>
---
.../devicetree/bindings/video/exynos_dp.txt | 17 ---
drivers/video/exynos/exynos_dp_core.c | 118 ++------------------
drivers/video/exynos/exynos_dp_core.h | 2 +
include/video/exynos_dp.h | 6 +-
4 files changed, 15 insertions(+), 128 deletions(-)
diff --git a/Documentation/devicetree/bindings/video/exynos_dp.txt b/Documentation/devicetree/bindings/video/exynos_dp.txt
index 84f10c1..a8320e3 100644
--- a/Documentation/devicetree/bindings/video/exynos_dp.txt
+++ b/Documentation/devicetree/bindings/video/exynos_dp.txt
@@ -1,17 +1,6 @@
The Exynos display port interface should be configured based on
the type of panel connected to it.
-We use two nodes:
- -dp-controller node
- -dptx-phy node(defined inside dp-controller node)
-
-For the DP-PHY initialization, we use the dptx-phy node.
-Required properties for dptx-phy:
- -reg:
- Base address of DP PHY register.
- -samsung,enable-mask:
- The bit-mask used to enable/disable DP PHY.
-
For the Panel initialization, we read data from dp-controller node.
Required properties for dp-controller:
-compatible:
@@ -67,12 +56,6 @@ SOC specific portion:
interrupt-parent = <&combiner>;
clocks = <&clock 342>;
clock-names = "dp";
-
- dptx-phy {
- reg = <0x10040720>;
- samsung,enable-mask = <1>;
- };
-
};
Board Specific portion:
diff --git a/drivers/video/exynos/exynos_dp_core.c b/drivers/video/exynos/exynos_dp_core.c
index 12bbede..bac515b 100644
--- a/drivers/video/exynos/exynos_dp_core.c
+++ b/drivers/video/exynos/exynos_dp_core.c
@@ -19,6 +19,7 @@
#include <linux/interrupt.h>
#include <linux/delay.h>
#include <linux/of.h>
+#include <linux/phy/phy.h>
#include <video/exynos_dp.h>
@@ -960,84 +961,15 @@ static struct exynos_dp_platdata *exynos_dp_dt_parse_pdata(struct device *dev)
return ERR_PTR(-EINVAL);
}
- return pd;
-}
-
-static int exynos_dp_dt_parse_phydata(struct exynos_dp_device *dp)
-{
- struct device_node *dp_phy_node = of_node_get(dp->dev->of_node);
- u32 phy_base;
- int ret = 0;
-
- dp_phy_node = of_find_node_by_name(dp_phy_node, "dptx-phy");
- if (!dp_phy_node) {
- dev_err(dp->dev, "could not find dptx-phy node\n");
- return -ENODEV;
- }
-
- if (of_property_read_u32(dp_phy_node, "reg", &phy_base)) {
- dev_err(dp->dev, "failed to get reg for dptx-phy\n");
- ret = -EINVAL;
- goto err;
- }
-
- if (of_property_read_u32(dp_phy_node, "samsung,enable-mask",
- &dp->enable_mask)) {
- dev_err(dp->dev, "failed to get enable-mask for dptx-phy\n");
- ret = -EINVAL;
- goto err;
- }
-
- dp->phy_addr = ioremap(phy_base, SZ_4);
- if (!dp->phy_addr) {
- dev_err(dp->dev, "failed to ioremap dp-phy\n");
- ret = -ENOMEM;
- goto err;
- }
-
-err:
- of_node_put(dp_phy_node);
-
- return ret;
-}
-
-static void exynos_dp_phy_init(struct exynos_dp_device *dp)
-{
- u32 reg;
-
- reg = __raw_readl(dp->phy_addr);
- reg |= dp->enable_mask;
- __raw_writel(reg, dp->phy_addr);
-}
-
-static void exynos_dp_phy_exit(struct exynos_dp_device *dp)
-{
- u32 reg;
+ pd->phy_label = "dp";
- reg = __raw_readl(dp->phy_addr);
- reg &= ~(dp->enable_mask);
- __raw_writel(reg, dp->phy_addr);
+ return pd;
}
#else
static struct exynos_dp_platdata *exynos_dp_dt_parse_pdata(struct device *dev)
{
return NULL;
}
-
-static int exynos_dp_dt_parse_phydata(struct exynos_dp_device *dp)
-{
- return -EINVAL;
-}
-
-static void exynos_dp_phy_init(struct exynos_dp_device *dp)
-{
- return;
-}
-
-static void exynos_dp_phy_exit(struct exynos_dp_device *dp)
-{
- return;
-}
#endif /* CONFIG_OF */
static int exynos_dp_probe(struct platform_device *pdev)
@@ -1061,10 +993,6 @@ static int exynos_dp_probe(struct platform_device *pdev)
pdata = exynos_dp_dt_parse_pdata(&pdev->dev);
if (IS_ERR(pdata))
return PTR_ERR(pdata);
-
- ret = exynos_dp_dt_parse_phydata(dp);
- if (ret)
- return ret;
} else {
pdata = pdev->dev.platform_data;
if (!pdata) {
@@ -1073,6 +1001,10 @@ static int exynos_dp_probe(struct platform_device *pdev)
}
}
+ dp->phy = devm_phy_get(&pdev->dev, pdata->phy_label);
+ if (IS_ERR(dp->phy))
+ return PTR_ERR(dp->phy);
+
dp->clock = devm_clk_get(&pdev->dev, "dp");
if (IS_ERR(dp->clock)) {
dev_err(&pdev->dev, "failed to get clock\n");
@@ -1097,13 +1029,7 @@ static int exynos_dp_probe(struct platform_device *pdev)
dp->video_info = pdata->video_info;
- if (pdev->dev.of_node) {
- if (dp->phy_addr)
- exynos_dp_phy_init(dp);
- } else {
- if (pdata->phy_init)
- pdata->phy_init();
- }
+ phy_power_on(dp->phy);
exynos_dp_init_dp(dp);
@@ -1121,42 +1047,27 @@ static int exynos_dp_probe(struct platform_device *pdev)
static int exynos_dp_remove(struct platform_device *pdev)
{
- struct exynos_dp_platdata *pdata = pdev->dev.platform_data;
struct exynos_dp_device *dp = platform_get_drvdata(pdev);
flush_work(&dp->hotplug_work);
- if (pdev->dev.of_node) {
- if (dp->phy_addr)
- exynos_dp_phy_exit(dp);
- } else {
- if (pdata->phy_exit)
- pdata->phy_exit();
- }
+ phy_power_off(dp->phy);
clk_disable_unprepare(dp->clock);
-
return 0;
}
#ifdef CONFIG_PM_SLEEP
static int exynos_dp_suspend(struct device *dev)
{
- struct exynos_dp_platdata *pdata = dev->platform_data;
struct exynos_dp_device *dp = dev_get_drvdata(dev);
disable_irq(dp->irq);
flush_work(&dp->hotplug_work);
- if (dev->of_node) {
- if (dp->phy_addr)
- exynos_dp_phy_exit(dp);
- } else {
- if (pdata->phy_exit)
- pdata->phy_exit();
- }
+ phy_power_off(dp->phy);
clk_disable_unprepare(dp->clock);
@@ -1165,16 +1076,9 @@ static int exynos_dp_suspend(struct device *dev)
static int exynos_dp_resume(struct device *dev)
{
- struct exynos_dp_platdata *pdata = dev->platform_data;
struct exynos_dp_device *dp = dev_get_drvdata(dev);
- if (dev->of_node) {
- if (dp->phy_addr)
- exynos_dp_phy_init(dp);
- } else {
- if (pdata->phy_init)
- pdata->phy_init();
- }
+ phy_power_on(dp->phy);
clk_prepare_enable(dp->clock);
diff --git a/drivers/video/exynos/exynos_dp_core.h b/drivers/video/exynos/exynos_dp_core.h
index 6c567bbf..b3d0328 100644
--- a/drivers/video/exynos/exynos_dp_core.h
+++ b/drivers/video/exynos/exynos_dp_core.h
@@ -42,6 +42,8 @@ struct exynos_dp_device {
struct video_info *video_info;
struct link_train link_train;
struct work_struct hotplug_work;
+
+ struct phy *phy;
};
/* exynos_dp_reg.c */
diff --git a/include/video/exynos_dp.h b/include/video/exynos_dp.h
index bd8cabd..f38c9af 100644
--- a/include/video/exynos_dp.h
+++ b/include/video/exynos_dp.h
@@ -122,10 +122,8 @@ struct video_info {
};
struct exynos_dp_platdata {
- struct video_info *video_info;
-
- void (*phy_init)(void);
- void (*phy_exit)(void);
+ struct video_info *video_info;
+ const char *phy_label;
};
#endif /* _EXYNOS_DP_H */
--
1.7.10.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH V2 3/3] video: exynos_dp: Use the generic PHY driver
@ 2013-06-28 7:18 ` Jingoo Han
0 siblings, 0 replies; 14+ messages in thread
From: Jingoo Han @ 2013-06-28 7:18 UTC (permalink / raw)
To: linux-arm-kernel
Use the generic PHY API instead of the platform callback to control
the DP PHY. The 'phy_label' field is added to the platform data
structure to allow PHY lookup on non-dt platforms.
Signed-off-by: Jingoo Han <jg1.han@samsung.com>
---
.../devicetree/bindings/video/exynos_dp.txt | 17 ---
drivers/video/exynos/exynos_dp_core.c | 118 ++------------------
drivers/video/exynos/exynos_dp_core.h | 2 +
include/video/exynos_dp.h | 6 +-
4 files changed, 15 insertions(+), 128 deletions(-)
diff --git a/Documentation/devicetree/bindings/video/exynos_dp.txt b/Documentation/devicetree/bindings/video/exynos_dp.txt
index 84f10c1..a8320e3 100644
--- a/Documentation/devicetree/bindings/video/exynos_dp.txt
+++ b/Documentation/devicetree/bindings/video/exynos_dp.txt
@@ -1,17 +1,6 @@
The Exynos display port interface should be configured based on
the type of panel connected to it.
-We use two nodes:
- -dp-controller node
- -dptx-phy node(defined inside dp-controller node)
-
-For the DP-PHY initialization, we use the dptx-phy node.
-Required properties for dptx-phy:
- -reg:
- Base address of DP PHY register.
- -samsung,enable-mask:
- The bit-mask used to enable/disable DP PHY.
-
For the Panel initialization, we read data from dp-controller node.
Required properties for dp-controller:
-compatible:
@@ -67,12 +56,6 @@ SOC specific portion:
interrupt-parent = <&combiner>;
clocks = <&clock 342>;
clock-names = "dp";
-
- dptx-phy {
- reg = <0x10040720>;
- samsung,enable-mask = <1>;
- };
-
};
Board Specific portion:
diff --git a/drivers/video/exynos/exynos_dp_core.c b/drivers/video/exynos/exynos_dp_core.c
index 12bbede..bac515b 100644
--- a/drivers/video/exynos/exynos_dp_core.c
+++ b/drivers/video/exynos/exynos_dp_core.c
@@ -19,6 +19,7 @@
#include <linux/interrupt.h>
#include <linux/delay.h>
#include <linux/of.h>
+#include <linux/phy/phy.h>
#include <video/exynos_dp.h>
@@ -960,84 +961,15 @@ static struct exynos_dp_platdata *exynos_dp_dt_parse_pdata(struct device *dev)
return ERR_PTR(-EINVAL);
}
- return pd;
-}
-
-static int exynos_dp_dt_parse_phydata(struct exynos_dp_device *dp)
-{
- struct device_node *dp_phy_node = of_node_get(dp->dev->of_node);
- u32 phy_base;
- int ret = 0;
-
- dp_phy_node = of_find_node_by_name(dp_phy_node, "dptx-phy");
- if (!dp_phy_node) {
- dev_err(dp->dev, "could not find dptx-phy node\n");
- return -ENODEV;
- }
-
- if (of_property_read_u32(dp_phy_node, "reg", &phy_base)) {
- dev_err(dp->dev, "failed to get reg for dptx-phy\n");
- ret = -EINVAL;
- goto err;
- }
-
- if (of_property_read_u32(dp_phy_node, "samsung,enable-mask",
- &dp->enable_mask)) {
- dev_err(dp->dev, "failed to get enable-mask for dptx-phy\n");
- ret = -EINVAL;
- goto err;
- }
-
- dp->phy_addr = ioremap(phy_base, SZ_4);
- if (!dp->phy_addr) {
- dev_err(dp->dev, "failed to ioremap dp-phy\n");
- ret = -ENOMEM;
- goto err;
- }
-
-err:
- of_node_put(dp_phy_node);
-
- return ret;
-}
-
-static void exynos_dp_phy_init(struct exynos_dp_device *dp)
-{
- u32 reg;
-
- reg = __raw_readl(dp->phy_addr);
- reg |= dp->enable_mask;
- __raw_writel(reg, dp->phy_addr);
-}
-
-static void exynos_dp_phy_exit(struct exynos_dp_device *dp)
-{
- u32 reg;
+ pd->phy_label = "dp";
- reg = __raw_readl(dp->phy_addr);
- reg &= ~(dp->enable_mask);
- __raw_writel(reg, dp->phy_addr);
+ return pd;
}
#else
static struct exynos_dp_platdata *exynos_dp_dt_parse_pdata(struct device *dev)
{
return NULL;
}
-
-static int exynos_dp_dt_parse_phydata(struct exynos_dp_device *dp)
-{
- return -EINVAL;
-}
-
-static void exynos_dp_phy_init(struct exynos_dp_device *dp)
-{
- return;
-}
-
-static void exynos_dp_phy_exit(struct exynos_dp_device *dp)
-{
- return;
-}
#endif /* CONFIG_OF */
static int exynos_dp_probe(struct platform_device *pdev)
@@ -1061,10 +993,6 @@ static int exynos_dp_probe(struct platform_device *pdev)
pdata = exynos_dp_dt_parse_pdata(&pdev->dev);
if (IS_ERR(pdata))
return PTR_ERR(pdata);
-
- ret = exynos_dp_dt_parse_phydata(dp);
- if (ret)
- return ret;
} else {
pdata = pdev->dev.platform_data;
if (!pdata) {
@@ -1073,6 +1001,10 @@ static int exynos_dp_probe(struct platform_device *pdev)
}
}
+ dp->phy = devm_phy_get(&pdev->dev, pdata->phy_label);
+ if (IS_ERR(dp->phy))
+ return PTR_ERR(dp->phy);
+
dp->clock = devm_clk_get(&pdev->dev, "dp");
if (IS_ERR(dp->clock)) {
dev_err(&pdev->dev, "failed to get clock\n");
@@ -1097,13 +1029,7 @@ static int exynos_dp_probe(struct platform_device *pdev)
dp->video_info = pdata->video_info;
- if (pdev->dev.of_node) {
- if (dp->phy_addr)
- exynos_dp_phy_init(dp);
- } else {
- if (pdata->phy_init)
- pdata->phy_init();
- }
+ phy_power_on(dp->phy);
exynos_dp_init_dp(dp);
@@ -1121,42 +1047,27 @@ static int exynos_dp_probe(struct platform_device *pdev)
static int exynos_dp_remove(struct platform_device *pdev)
{
- struct exynos_dp_platdata *pdata = pdev->dev.platform_data;
struct exynos_dp_device *dp = platform_get_drvdata(pdev);
flush_work(&dp->hotplug_work);
- if (pdev->dev.of_node) {
- if (dp->phy_addr)
- exynos_dp_phy_exit(dp);
- } else {
- if (pdata->phy_exit)
- pdata->phy_exit();
- }
+ phy_power_off(dp->phy);
clk_disable_unprepare(dp->clock);
-
return 0;
}
#ifdef CONFIG_PM_SLEEP
static int exynos_dp_suspend(struct device *dev)
{
- struct exynos_dp_platdata *pdata = dev->platform_data;
struct exynos_dp_device *dp = dev_get_drvdata(dev);
disable_irq(dp->irq);
flush_work(&dp->hotplug_work);
- if (dev->of_node) {
- if (dp->phy_addr)
- exynos_dp_phy_exit(dp);
- } else {
- if (pdata->phy_exit)
- pdata->phy_exit();
- }
+ phy_power_off(dp->phy);
clk_disable_unprepare(dp->clock);
@@ -1165,16 +1076,9 @@ static int exynos_dp_suspend(struct device *dev)
static int exynos_dp_resume(struct device *dev)
{
- struct exynos_dp_platdata *pdata = dev->platform_data;
struct exynos_dp_device *dp = dev_get_drvdata(dev);
- if (dev->of_node) {
- if (dp->phy_addr)
- exynos_dp_phy_init(dp);
- } else {
- if (pdata->phy_init)
- pdata->phy_init();
- }
+ phy_power_on(dp->phy);
clk_prepare_enable(dp->clock);
diff --git a/drivers/video/exynos/exynos_dp_core.h b/drivers/video/exynos/exynos_dp_core.h
index 6c567bbf..b3d0328 100644
--- a/drivers/video/exynos/exynos_dp_core.h
+++ b/drivers/video/exynos/exynos_dp_core.h
@@ -42,6 +42,8 @@ struct exynos_dp_device {
struct video_info *video_info;
struct link_train link_train;
struct work_struct hotplug_work;
+
+ struct phy *phy;
};
/* exynos_dp_reg.c */
diff --git a/include/video/exynos_dp.h b/include/video/exynos_dp.h
index bd8cabd..f38c9af 100644
--- a/include/video/exynos_dp.h
+++ b/include/video/exynos_dp.h
@@ -122,10 +122,8 @@ struct video_info {
};
struct exynos_dp_platdata {
- struct video_info *video_info;
-
- void (*phy_init)(void);
- void (*phy_exit)(void);
+ struct video_info *video_info;
+ const char *phy_label;
};
#endif /* _EXYNOS_DP_H */
--
1.7.10.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH V2 3/3] video: exynos_dp: Use the generic PHY driver
@ 2013-06-28 7:18 ` Jingoo Han
0 siblings, 0 replies; 14+ messages in thread
From: Jingoo Han @ 2013-06-28 7:18 UTC (permalink / raw)
To: linux-arm-kernel
Use the generic PHY API instead of the platform callback to control
the DP PHY. The 'phy_label' field is added to the platform data
structure to allow PHY lookup on non-dt platforms.
Signed-off-by: Jingoo Han <jg1.han@samsung.com>
---
.../devicetree/bindings/video/exynos_dp.txt | 17 ---
drivers/video/exynos/exynos_dp_core.c | 118 ++------------------
drivers/video/exynos/exynos_dp_core.h | 2 +
include/video/exynos_dp.h | 6 +-
4 files changed, 15 insertions(+), 128 deletions(-)
diff --git a/Documentation/devicetree/bindings/video/exynos_dp.txt b/Documentation/devicetree/bindings/video/exynos_dp.txt
index 84f10c1..a8320e3 100644
--- a/Documentation/devicetree/bindings/video/exynos_dp.txt
+++ b/Documentation/devicetree/bindings/video/exynos_dp.txt
@@ -1,17 +1,6 @@
The Exynos display port interface should be configured based on
the type of panel connected to it.
-We use two nodes:
- -dp-controller node
- -dptx-phy node(defined inside dp-controller node)
-
-For the DP-PHY initialization, we use the dptx-phy node.
-Required properties for dptx-phy:
- -reg:
- Base address of DP PHY register.
- -samsung,enable-mask:
- The bit-mask used to enable/disable DP PHY.
-
For the Panel initialization, we read data from dp-controller node.
Required properties for dp-controller:
-compatible:
@@ -67,12 +56,6 @@ SOC specific portion:
interrupt-parent = <&combiner>;
clocks = <&clock 342>;
clock-names = "dp";
-
- dptx-phy {
- reg = <0x10040720>;
- samsung,enable-mask = <1>;
- };
-
};
Board Specific portion:
diff --git a/drivers/video/exynos/exynos_dp_core.c b/drivers/video/exynos/exynos_dp_core.c
index 12bbede..bac515b 100644
--- a/drivers/video/exynos/exynos_dp_core.c
+++ b/drivers/video/exynos/exynos_dp_core.c
@@ -19,6 +19,7 @@
#include <linux/interrupt.h>
#include <linux/delay.h>
#include <linux/of.h>
+#include <linux/phy/phy.h>
#include <video/exynos_dp.h>
@@ -960,84 +961,15 @@ static struct exynos_dp_platdata *exynos_dp_dt_parse_pdata(struct device *dev)
return ERR_PTR(-EINVAL);
}
- return pd;
-}
-
-static int exynos_dp_dt_parse_phydata(struct exynos_dp_device *dp)
-{
- struct device_node *dp_phy_node = of_node_get(dp->dev->of_node);
- u32 phy_base;
- int ret = 0;
-
- dp_phy_node = of_find_node_by_name(dp_phy_node, "dptx-phy");
- if (!dp_phy_node) {
- dev_err(dp->dev, "could not find dptx-phy node\n");
- return -ENODEV;
- }
-
- if (of_property_read_u32(dp_phy_node, "reg", &phy_base)) {
- dev_err(dp->dev, "failed to get reg for dptx-phy\n");
- ret = -EINVAL;
- goto err;
- }
-
- if (of_property_read_u32(dp_phy_node, "samsung,enable-mask",
- &dp->enable_mask)) {
- dev_err(dp->dev, "failed to get enable-mask for dptx-phy\n");
- ret = -EINVAL;
- goto err;
- }
-
- dp->phy_addr = ioremap(phy_base, SZ_4);
- if (!dp->phy_addr) {
- dev_err(dp->dev, "failed to ioremap dp-phy\n");
- ret = -ENOMEM;
- goto err;
- }
-
-err:
- of_node_put(dp_phy_node);
-
- return ret;
-}
-
-static void exynos_dp_phy_init(struct exynos_dp_device *dp)
-{
- u32 reg;
-
- reg = __raw_readl(dp->phy_addr);
- reg |= dp->enable_mask;
- __raw_writel(reg, dp->phy_addr);
-}
-
-static void exynos_dp_phy_exit(struct exynos_dp_device *dp)
-{
- u32 reg;
+ pd->phy_label = "dp";
- reg = __raw_readl(dp->phy_addr);
- reg &= ~(dp->enable_mask);
- __raw_writel(reg, dp->phy_addr);
+ return pd;
}
#else
static struct exynos_dp_platdata *exynos_dp_dt_parse_pdata(struct device *dev)
{
return NULL;
}
-
-static int exynos_dp_dt_parse_phydata(struct exynos_dp_device *dp)
-{
- return -EINVAL;
-}
-
-static void exynos_dp_phy_init(struct exynos_dp_device *dp)
-{
- return;
-}
-
-static void exynos_dp_phy_exit(struct exynos_dp_device *dp)
-{
- return;
-}
#endif /* CONFIG_OF */
static int exynos_dp_probe(struct platform_device *pdev)
@@ -1061,10 +993,6 @@ static int exynos_dp_probe(struct platform_device *pdev)
pdata = exynos_dp_dt_parse_pdata(&pdev->dev);
if (IS_ERR(pdata))
return PTR_ERR(pdata);
-
- ret = exynos_dp_dt_parse_phydata(dp);
- if (ret)
- return ret;
} else {
pdata = pdev->dev.platform_data;
if (!pdata) {
@@ -1073,6 +1001,10 @@ static int exynos_dp_probe(struct platform_device *pdev)
}
}
+ dp->phy = devm_phy_get(&pdev->dev, pdata->phy_label);
+ if (IS_ERR(dp->phy))
+ return PTR_ERR(dp->phy);
+
dp->clock = devm_clk_get(&pdev->dev, "dp");
if (IS_ERR(dp->clock)) {
dev_err(&pdev->dev, "failed to get clock\n");
@@ -1097,13 +1029,7 @@ static int exynos_dp_probe(struct platform_device *pdev)
dp->video_info = pdata->video_info;
- if (pdev->dev.of_node) {
- if (dp->phy_addr)
- exynos_dp_phy_init(dp);
- } else {
- if (pdata->phy_init)
- pdata->phy_init();
- }
+ phy_power_on(dp->phy);
exynos_dp_init_dp(dp);
@@ -1121,42 +1047,27 @@ static int exynos_dp_probe(struct platform_device *pdev)
static int exynos_dp_remove(struct platform_device *pdev)
{
- struct exynos_dp_platdata *pdata = pdev->dev.platform_data;
struct exynos_dp_device *dp = platform_get_drvdata(pdev);
flush_work(&dp->hotplug_work);
- if (pdev->dev.of_node) {
- if (dp->phy_addr)
- exynos_dp_phy_exit(dp);
- } else {
- if (pdata->phy_exit)
- pdata->phy_exit();
- }
+ phy_power_off(dp->phy);
clk_disable_unprepare(dp->clock);
-
return 0;
}
#ifdef CONFIG_PM_SLEEP
static int exynos_dp_suspend(struct device *dev)
{
- struct exynos_dp_platdata *pdata = dev->platform_data;
struct exynos_dp_device *dp = dev_get_drvdata(dev);
disable_irq(dp->irq);
flush_work(&dp->hotplug_work);
- if (dev->of_node) {
- if (dp->phy_addr)
- exynos_dp_phy_exit(dp);
- } else {
- if (pdata->phy_exit)
- pdata->phy_exit();
- }
+ phy_power_off(dp->phy);
clk_disable_unprepare(dp->clock);
@@ -1165,16 +1076,9 @@ static int exynos_dp_suspend(struct device *dev)
static int exynos_dp_resume(struct device *dev)
{
- struct exynos_dp_platdata *pdata = dev->platform_data;
struct exynos_dp_device *dp = dev_get_drvdata(dev);
- if (dev->of_node) {
- if (dp->phy_addr)
- exynos_dp_phy_init(dp);
- } else {
- if (pdata->phy_init)
- pdata->phy_init();
- }
+ phy_power_on(dp->phy);
clk_prepare_enable(dp->clock);
diff --git a/drivers/video/exynos/exynos_dp_core.h b/drivers/video/exynos/exynos_dp_core.h
index 6c567bbf..b3d0328 100644
--- a/drivers/video/exynos/exynos_dp_core.h
+++ b/drivers/video/exynos/exynos_dp_core.h
@@ -42,6 +42,8 @@ struct exynos_dp_device {
struct video_info *video_info;
struct link_train link_train;
struct work_struct hotplug_work;
+
+ struct phy *phy;
};
/* exynos_dp_reg.c */
diff --git a/include/video/exynos_dp.h b/include/video/exynos_dp.h
index bd8cabd..f38c9af 100644
--- a/include/video/exynos_dp.h
+++ b/include/video/exynos_dp.h
@@ -122,10 +122,8 @@ struct video_info {
};
struct exynos_dp_platdata {
- struct video_info *video_info;
-
- void (*phy_init)(void);
- void (*phy_exit)(void);
+ struct video_info *video_info;
+ const char *phy_label;
};
#endif /* _EXYNOS_DP_H */
--
1.7.10.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH V2 3/3] video: exynos_dp: Use the generic PHY driver
2013-06-28 7:18 ` Jingoo Han
(?)
(?)
@ 2013-06-28 9:35 ` Felipe Balbi
-1 siblings, 0 replies; 14+ messages in thread
From: Felipe Balbi @ 2013-06-28 9:35 UTC (permalink / raw)
To: Jingoo Han
Cc: linux-arm-kernel, linux-samsung-soc,
'Kishon Vijay Abraham I',
linux-media, 'Kukjin Kim', 'Sylwester Nawrocki',
'Felipe Balbi', 'Tomasz Figa',
devicetree-discuss, 'Inki Dae', 'Donghwa Lee',
'Kyungmin Park',
'Jean-Christophe PLAGNIOL-VILLARD',
linux-fbdev
[-- Attachment #1: Type: text/plain, Size: 3839 bytes --]
On Fri, Jun 28, 2013 at 04:18:23PM +0900, Jingoo Han wrote:
> Use the generic PHY API instead of the platform callback to control
> the DP PHY. The 'phy_label' field is added to the platform data
> structure to allow PHY lookup on non-dt platforms.
>
> Signed-off-by: Jingoo Han <jg1.han@samsung.com>
> ---
> .../devicetree/bindings/video/exynos_dp.txt | 17 ---
> drivers/video/exynos/exynos_dp_core.c | 118 ++------------------
> drivers/video/exynos/exynos_dp_core.h | 2 +
> include/video/exynos_dp.h | 6 +-
> 4 files changed, 15 insertions(+), 128 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/video/exynos_dp.txt b/Documentation/devicetree/bindings/video/exynos_dp.txt
> index 84f10c1..a8320e3 100644
> --- a/Documentation/devicetree/bindings/video/exynos_dp.txt
> +++ b/Documentation/devicetree/bindings/video/exynos_dp.txt
> @@ -1,17 +1,6 @@
> The Exynos display port interface should be configured based on
> the type of panel connected to it.
>
> -We use two nodes:
> - -dp-controller node
> - -dptx-phy node(defined inside dp-controller node)
> -
> -For the DP-PHY initialization, we use the dptx-phy node.
> -Required properties for dptx-phy:
> - -reg:
> - Base address of DP PHY register.
> - -samsung,enable-mask:
> - The bit-mask used to enable/disable DP PHY.
> -
> For the Panel initialization, we read data from dp-controller node.
> Required properties for dp-controller:
> -compatible:
> @@ -67,12 +56,6 @@ SOC specific portion:
> interrupt-parent = <&combiner>;
> clocks = <&clock 342>;
> clock-names = "dp";
> -
> - dptx-phy {
> - reg = <0x10040720>;
> - samsung,enable-mask = <1>;
> - };
> -
> };
>
> Board Specific portion:
> diff --git a/drivers/video/exynos/exynos_dp_core.c b/drivers/video/exynos/exynos_dp_core.c
> index 12bbede..bac515b 100644
> --- a/drivers/video/exynos/exynos_dp_core.c
> +++ b/drivers/video/exynos/exynos_dp_core.c
> @@ -19,6 +19,7 @@
> #include <linux/interrupt.h>
> #include <linux/delay.h>
> #include <linux/of.h>
> +#include <linux/phy/phy.h>
>
> #include <video/exynos_dp.h>
>
> @@ -960,84 +961,15 @@ static struct exynos_dp_platdata *exynos_dp_dt_parse_pdata(struct device *dev)
> return ERR_PTR(-EINVAL);
> }
>
> - return pd;
> -}
> -
> -static int exynos_dp_dt_parse_phydata(struct exynos_dp_device *dp)
> -{
> - struct device_node *dp_phy_node = of_node_get(dp->dev->of_node);
> - u32 phy_base;
> - int ret = 0;
> -
> - dp_phy_node = of_find_node_by_name(dp_phy_node, "dptx-phy");
> - if (!dp_phy_node) {
> - dev_err(dp->dev, "could not find dptx-phy node\n");
> - return -ENODEV;
> - }
> -
> - if (of_property_read_u32(dp_phy_node, "reg", &phy_base)) {
> - dev_err(dp->dev, "failed to get reg for dptx-phy\n");
> - ret = -EINVAL;
> - goto err;
> - }
> -
> - if (of_property_read_u32(dp_phy_node, "samsung,enable-mask",
> - &dp->enable_mask)) {
> - dev_err(dp->dev, "failed to get enable-mask for dptx-phy\n");
> - ret = -EINVAL;
> - goto err;
> - }
> -
> - dp->phy_addr = ioremap(phy_base, SZ_4);
> - if (!dp->phy_addr) {
> - dev_err(dp->dev, "failed to ioremap dp-phy\n");
> - ret = -ENOMEM;
> - goto err;
> - }
> -
> -err:
> - of_node_put(dp_phy_node);
> -
> - return ret;
> -}
> -
> -static void exynos_dp_phy_init(struct exynos_dp_device *dp)
> -{
> - u32 reg;
> -
> - reg = __raw_readl(dp->phy_addr);
> - reg |= dp->enable_mask;
> - __raw_writel(reg, dp->phy_addr);
> -}
> -
> -static void exynos_dp_phy_exit(struct exynos_dp_device *dp)
> -{
> - u32 reg;
> + pd->phy_label = "dp";
only the label, which I would use 'display-port'. Other than that:
Acked-by: Felipe Balbi <balbi@ti.com>
--
balbi
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH V2 3/3] video: exynos_dp: Use the generic PHY driver
@ 2013-06-28 9:35 ` Felipe Balbi
0 siblings, 0 replies; 14+ messages in thread
From: Felipe Balbi @ 2013-06-28 9:35 UTC (permalink / raw)
To: Jingoo Han
Cc: linux-arm-kernel, linux-samsung-soc,
'Kishon Vijay Abraham I',
linux-media, 'Kukjin Kim', 'Sylwester Nawrocki',
'Felipe Balbi', 'Tomasz Figa',
devicetree-discuss, 'Inki Dae', 'Donghwa Lee',
'Kyungmin Park',
'Jean-Christophe PLAGNIOL-VILLARD',
linux-fbdev
[-- Attachment #1: Type: text/plain, Size: 3839 bytes --]
On Fri, Jun 28, 2013 at 04:18:23PM +0900, Jingoo Han wrote:
> Use the generic PHY API instead of the platform callback to control
> the DP PHY. The 'phy_label' field is added to the platform data
> structure to allow PHY lookup on non-dt platforms.
>
> Signed-off-by: Jingoo Han <jg1.han@samsung.com>
> ---
> .../devicetree/bindings/video/exynos_dp.txt | 17 ---
> drivers/video/exynos/exynos_dp_core.c | 118 ++------------------
> drivers/video/exynos/exynos_dp_core.h | 2 +
> include/video/exynos_dp.h | 6 +-
> 4 files changed, 15 insertions(+), 128 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/video/exynos_dp.txt b/Documentation/devicetree/bindings/video/exynos_dp.txt
> index 84f10c1..a8320e3 100644
> --- a/Documentation/devicetree/bindings/video/exynos_dp.txt
> +++ b/Documentation/devicetree/bindings/video/exynos_dp.txt
> @@ -1,17 +1,6 @@
> The Exynos display port interface should be configured based on
> the type of panel connected to it.
>
> -We use two nodes:
> - -dp-controller node
> - -dptx-phy node(defined inside dp-controller node)
> -
> -For the DP-PHY initialization, we use the dptx-phy node.
> -Required properties for dptx-phy:
> - -reg:
> - Base address of DP PHY register.
> - -samsung,enable-mask:
> - The bit-mask used to enable/disable DP PHY.
> -
> For the Panel initialization, we read data from dp-controller node.
> Required properties for dp-controller:
> -compatible:
> @@ -67,12 +56,6 @@ SOC specific portion:
> interrupt-parent = <&combiner>;
> clocks = <&clock 342>;
> clock-names = "dp";
> -
> - dptx-phy {
> - reg = <0x10040720>;
> - samsung,enable-mask = <1>;
> - };
> -
> };
>
> Board Specific portion:
> diff --git a/drivers/video/exynos/exynos_dp_core.c b/drivers/video/exynos/exynos_dp_core.c
> index 12bbede..bac515b 100644
> --- a/drivers/video/exynos/exynos_dp_core.c
> +++ b/drivers/video/exynos/exynos_dp_core.c
> @@ -19,6 +19,7 @@
> #include <linux/interrupt.h>
> #include <linux/delay.h>
> #include <linux/of.h>
> +#include <linux/phy/phy.h>
>
> #include <video/exynos_dp.h>
>
> @@ -960,84 +961,15 @@ static struct exynos_dp_platdata *exynos_dp_dt_parse_pdata(struct device *dev)
> return ERR_PTR(-EINVAL);
> }
>
> - return pd;
> -}
> -
> -static int exynos_dp_dt_parse_phydata(struct exynos_dp_device *dp)
> -{
> - struct device_node *dp_phy_node = of_node_get(dp->dev->of_node);
> - u32 phy_base;
> - int ret = 0;
> -
> - dp_phy_node = of_find_node_by_name(dp_phy_node, "dptx-phy");
> - if (!dp_phy_node) {
> - dev_err(dp->dev, "could not find dptx-phy node\n");
> - return -ENODEV;
> - }
> -
> - if (of_property_read_u32(dp_phy_node, "reg", &phy_base)) {
> - dev_err(dp->dev, "failed to get reg for dptx-phy\n");
> - ret = -EINVAL;
> - goto err;
> - }
> -
> - if (of_property_read_u32(dp_phy_node, "samsung,enable-mask",
> - &dp->enable_mask)) {
> - dev_err(dp->dev, "failed to get enable-mask for dptx-phy\n");
> - ret = -EINVAL;
> - goto err;
> - }
> -
> - dp->phy_addr = ioremap(phy_base, SZ_4);
> - if (!dp->phy_addr) {
> - dev_err(dp->dev, "failed to ioremap dp-phy\n");
> - ret = -ENOMEM;
> - goto err;
> - }
> -
> -err:
> - of_node_put(dp_phy_node);
> -
> - return ret;
> -}
> -
> -static void exynos_dp_phy_init(struct exynos_dp_device *dp)
> -{
> - u32 reg;
> -
> - reg = __raw_readl(dp->phy_addr);
> - reg |= dp->enable_mask;
> - __raw_writel(reg, dp->phy_addr);
> -}
> -
> -static void exynos_dp_phy_exit(struct exynos_dp_device *dp)
> -{
> - u32 reg;
> + pd->phy_label = "dp";
only the label, which I would use 'display-port'. Other than that:
Acked-by: Felipe Balbi <balbi@ti.com>
--
balbi
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH V2 3/3] video: exynos_dp: Use the generic PHY driver
@ 2013-06-28 9:35 ` Felipe Balbi
0 siblings, 0 replies; 14+ messages in thread
From: Felipe Balbi @ 2013-06-28 9:35 UTC (permalink / raw)
To: linux-arm-kernel
[-- Attachment #1: Type: text/plain, Size: 3839 bytes --]
On Fri, Jun 28, 2013 at 04:18:23PM +0900, Jingoo Han wrote:
> Use the generic PHY API instead of the platform callback to control
> the DP PHY. The 'phy_label' field is added to the platform data
> structure to allow PHY lookup on non-dt platforms.
>
> Signed-off-by: Jingoo Han <jg1.han@samsung.com>
> ---
> .../devicetree/bindings/video/exynos_dp.txt | 17 ---
> drivers/video/exynos/exynos_dp_core.c | 118 ++------------------
> drivers/video/exynos/exynos_dp_core.h | 2 +
> include/video/exynos_dp.h | 6 +-
> 4 files changed, 15 insertions(+), 128 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/video/exynos_dp.txt b/Documentation/devicetree/bindings/video/exynos_dp.txt
> index 84f10c1..a8320e3 100644
> --- a/Documentation/devicetree/bindings/video/exynos_dp.txt
> +++ b/Documentation/devicetree/bindings/video/exynos_dp.txt
> @@ -1,17 +1,6 @@
> The Exynos display port interface should be configured based on
> the type of panel connected to it.
>
> -We use two nodes:
> - -dp-controller node
> - -dptx-phy node(defined inside dp-controller node)
> -
> -For the DP-PHY initialization, we use the dptx-phy node.
> -Required properties for dptx-phy:
> - -reg:
> - Base address of DP PHY register.
> - -samsung,enable-mask:
> - The bit-mask used to enable/disable DP PHY.
> -
> For the Panel initialization, we read data from dp-controller node.
> Required properties for dp-controller:
> -compatible:
> @@ -67,12 +56,6 @@ SOC specific portion:
> interrupt-parent = <&combiner>;
> clocks = <&clock 342>;
> clock-names = "dp";
> -
> - dptx-phy {
> - reg = <0x10040720>;
> - samsung,enable-mask = <1>;
> - };
> -
> };
>
> Board Specific portion:
> diff --git a/drivers/video/exynos/exynos_dp_core.c b/drivers/video/exynos/exynos_dp_core.c
> index 12bbede..bac515b 100644
> --- a/drivers/video/exynos/exynos_dp_core.c
> +++ b/drivers/video/exynos/exynos_dp_core.c
> @@ -19,6 +19,7 @@
> #include <linux/interrupt.h>
> #include <linux/delay.h>
> #include <linux/of.h>
> +#include <linux/phy/phy.h>
>
> #include <video/exynos_dp.h>
>
> @@ -960,84 +961,15 @@ static struct exynos_dp_platdata *exynos_dp_dt_parse_pdata(struct device *dev)
> return ERR_PTR(-EINVAL);
> }
>
> - return pd;
> -}
> -
> -static int exynos_dp_dt_parse_phydata(struct exynos_dp_device *dp)
> -{
> - struct device_node *dp_phy_node = of_node_get(dp->dev->of_node);
> - u32 phy_base;
> - int ret = 0;
> -
> - dp_phy_node = of_find_node_by_name(dp_phy_node, "dptx-phy");
> - if (!dp_phy_node) {
> - dev_err(dp->dev, "could not find dptx-phy node\n");
> - return -ENODEV;
> - }
> -
> - if (of_property_read_u32(dp_phy_node, "reg", &phy_base)) {
> - dev_err(dp->dev, "failed to get reg for dptx-phy\n");
> - ret = -EINVAL;
> - goto err;
> - }
> -
> - if (of_property_read_u32(dp_phy_node, "samsung,enable-mask",
> - &dp->enable_mask)) {
> - dev_err(dp->dev, "failed to get enable-mask for dptx-phy\n");
> - ret = -EINVAL;
> - goto err;
> - }
> -
> - dp->phy_addr = ioremap(phy_base, SZ_4);
> - if (!dp->phy_addr) {
> - dev_err(dp->dev, "failed to ioremap dp-phy\n");
> - ret = -ENOMEM;
> - goto err;
> - }
> -
> -err:
> - of_node_put(dp_phy_node);
> -
> - return ret;
> -}
> -
> -static void exynos_dp_phy_init(struct exynos_dp_device *dp)
> -{
> - u32 reg;
> -
> - reg = __raw_readl(dp->phy_addr);
> - reg |= dp->enable_mask;
> - __raw_writel(reg, dp->phy_addr);
> -}
> -
> -static void exynos_dp_phy_exit(struct exynos_dp_device *dp)
> -{
> - u32 reg;
> + pd->phy_label = "dp";
only the label, which I would use 'display-port'. Other than that:
Acked-by: Felipe Balbi <balbi@ti.com>
--
balbi
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH V2 3/3] video: exynos_dp: Use the generic PHY driver
@ 2013-06-28 9:35 ` Felipe Balbi
0 siblings, 0 replies; 14+ messages in thread
From: Felipe Balbi @ 2013-06-28 9:35 UTC (permalink / raw)
To: linux-arm-kernel
On Fri, Jun 28, 2013 at 04:18:23PM +0900, Jingoo Han wrote:
> Use the generic PHY API instead of the platform callback to control
> the DP PHY. The 'phy_label' field is added to the platform data
> structure to allow PHY lookup on non-dt platforms.
>
> Signed-off-by: Jingoo Han <jg1.han@samsung.com>
> ---
> .../devicetree/bindings/video/exynos_dp.txt | 17 ---
> drivers/video/exynos/exynos_dp_core.c | 118 ++------------------
> drivers/video/exynos/exynos_dp_core.h | 2 +
> include/video/exynos_dp.h | 6 +-
> 4 files changed, 15 insertions(+), 128 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/video/exynos_dp.txt b/Documentation/devicetree/bindings/video/exynos_dp.txt
> index 84f10c1..a8320e3 100644
> --- a/Documentation/devicetree/bindings/video/exynos_dp.txt
> +++ b/Documentation/devicetree/bindings/video/exynos_dp.txt
> @@ -1,17 +1,6 @@
> The Exynos display port interface should be configured based on
> the type of panel connected to it.
>
> -We use two nodes:
> - -dp-controller node
> - -dptx-phy node(defined inside dp-controller node)
> -
> -For the DP-PHY initialization, we use the dptx-phy node.
> -Required properties for dptx-phy:
> - -reg:
> - Base address of DP PHY register.
> - -samsung,enable-mask:
> - The bit-mask used to enable/disable DP PHY.
> -
> For the Panel initialization, we read data from dp-controller node.
> Required properties for dp-controller:
> -compatible:
> @@ -67,12 +56,6 @@ SOC specific portion:
> interrupt-parent = <&combiner>;
> clocks = <&clock 342>;
> clock-names = "dp";
> -
> - dptx-phy {
> - reg = <0x10040720>;
> - samsung,enable-mask = <1>;
> - };
> -
> };
>
> Board Specific portion:
> diff --git a/drivers/video/exynos/exynos_dp_core.c b/drivers/video/exynos/exynos_dp_core.c
> index 12bbede..bac515b 100644
> --- a/drivers/video/exynos/exynos_dp_core.c
> +++ b/drivers/video/exynos/exynos_dp_core.c
> @@ -19,6 +19,7 @@
> #include <linux/interrupt.h>
> #include <linux/delay.h>
> #include <linux/of.h>
> +#include <linux/phy/phy.h>
>
> #include <video/exynos_dp.h>
>
> @@ -960,84 +961,15 @@ static struct exynos_dp_platdata *exynos_dp_dt_parse_pdata(struct device *dev)
> return ERR_PTR(-EINVAL);
> }
>
> - return pd;
> -}
> -
> -static int exynos_dp_dt_parse_phydata(struct exynos_dp_device *dp)
> -{
> - struct device_node *dp_phy_node = of_node_get(dp->dev->of_node);
> - u32 phy_base;
> - int ret = 0;
> -
> - dp_phy_node = of_find_node_by_name(dp_phy_node, "dptx-phy");
> - if (!dp_phy_node) {
> - dev_err(dp->dev, "could not find dptx-phy node\n");
> - return -ENODEV;
> - }
> -
> - if (of_property_read_u32(dp_phy_node, "reg", &phy_base)) {
> - dev_err(dp->dev, "failed to get reg for dptx-phy\n");
> - ret = -EINVAL;
> - goto err;
> - }
> -
> - if (of_property_read_u32(dp_phy_node, "samsung,enable-mask",
> - &dp->enable_mask)) {
> - dev_err(dp->dev, "failed to get enable-mask for dptx-phy\n");
> - ret = -EINVAL;
> - goto err;
> - }
> -
> - dp->phy_addr = ioremap(phy_base, SZ_4);
> - if (!dp->phy_addr) {
> - dev_err(dp->dev, "failed to ioremap dp-phy\n");
> - ret = -ENOMEM;
> - goto err;
> - }
> -
> -err:
> - of_node_put(dp_phy_node);
> -
> - return ret;
> -}
> -
> -static void exynos_dp_phy_init(struct exynos_dp_device *dp)
> -{
> - u32 reg;
> -
> - reg = __raw_readl(dp->phy_addr);
> - reg |= dp->enable_mask;
> - __raw_writel(reg, dp->phy_addr);
> -}
> -
> -static void exynos_dp_phy_exit(struct exynos_dp_device *dp)
> -{
> - u32 reg;
> + pd->phy_label = "dp";
only the label, which I would use 'display-port'. Other than that:
Acked-by: Felipe Balbi <balbi@ti.com>
--
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/20130628/149b1753/attachment.sig>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH V2 3/3] video: exynos_dp: Use the generic PHY driver
2013-06-28 9:35 ` Felipe Balbi
(?)
(?)
@ 2013-06-28 10:27 ` Jean-Christophe PLAGNIOL-VILLARD
-1 siblings, 0 replies; 14+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2013-06-28 10:27 UTC (permalink / raw)
To: Felipe Balbi, Grant Likely
Cc: linux-fbdev, 'Kukjin Kim', 'Tomasz Figa',
Jingoo Han, 'Donghwa Lee',
'Kishon Vijay Abraham I', 'Inki Dae',
'Kyungmin Park',
linux-samsung-soc, 'Sylwester Nawrocki',
devicetree-discuss, linux-arm-kernel, linux-media
On 12:35 Fri 28 Jun , Felipe Balbi wrote:
> On Fri, Jun 28, 2013 at 04:18:23PM +0900, Jingoo Han wrote:
> > Use the generic PHY API instead of the platform callback to control
> > the DP PHY. The 'phy_label' field is added to the platform data
> > structure to allow PHY lookup on non-dt platforms.
> >
> > Signed-off-by: Jingoo Han <jg1.han@samsung.com>
> > ---
> > .../devicetree/bindings/video/exynos_dp.txt | 17 ---
> > drivers/video/exynos/exynos_dp_core.c | 118 ++------------------
> > drivers/video/exynos/exynos_dp_core.h | 2 +
> > include/video/exynos_dp.h | 6 +-
> > 4 files changed, 15 insertions(+), 128 deletions(-)
> >
> > diff --git a/Documentation/devicetree/bindings/video/exynos_dp.txt b/Documentation/devicetree/bindings/video/exynos_dp.txt
> > index 84f10c1..a8320e3 100644
> > --- a/Documentation/devicetree/bindings/video/exynos_dp.txt
> > +++ b/Documentation/devicetree/bindings/video/exynos_dp.txt
> > @@ -1,17 +1,6 @@
> > The Exynos display port interface should be configured based on
> > the type of panel connected to it.
> >
> > -We use two nodes:
> > - -dp-controller node
> > - -dptx-phy node(defined inside dp-controller node)
> > -
> > -For the DP-PHY initialization, we use the dptx-phy node.
> > -Required properties for dptx-phy:
> > - -reg:
> > - Base address of DP PHY register.
> > - -samsung,enable-mask:
> > - The bit-mask used to enable/disable DP PHY.
> > -
> > For the Panel initialization, we read data from dp-controller node.
> > Required properties for dp-controller:
> > -compatible:
> > @@ -67,12 +56,6 @@ SOC specific portion:
> > interrupt-parent = <&combiner>;
> > clocks = <&clock 342>;
> > clock-names = "dp";
> > -
> > - dptx-phy {
> > - reg = <0x10040720>;
> > - samsung,enable-mask = <1>;
> > - };
I've an issue here you break dt compatibilty
Best Regards,
J.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH V2 3/3] video: exynos_dp: Use the generic PHY driver
@ 2013-06-28 10:27 ` Jean-Christophe PLAGNIOL-VILLARD
0 siblings, 0 replies; 14+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2013-06-28 10:27 UTC (permalink / raw)
To: Felipe Balbi, Grant Likely
Cc: Jingoo Han, linux-arm-kernel, linux-samsung-soc,
'Kishon Vijay Abraham I',
linux-media, 'Kukjin Kim', 'Sylwester Nawrocki',
'Tomasz Figa', devicetree-discuss, 'Inki Dae',
'Donghwa Lee', 'Kyungmin Park',
linux-fbdev
On 12:35 Fri 28 Jun , Felipe Balbi wrote:
> On Fri, Jun 28, 2013 at 04:18:23PM +0900, Jingoo Han wrote:
> > Use the generic PHY API instead of the platform callback to control
> > the DP PHY. The 'phy_label' field is added to the platform data
> > structure to allow PHY lookup on non-dt platforms.
> >
> > Signed-off-by: Jingoo Han <jg1.han@samsung.com>
> > ---
> > .../devicetree/bindings/video/exynos_dp.txt | 17 ---
> > drivers/video/exynos/exynos_dp_core.c | 118 ++------------------
> > drivers/video/exynos/exynos_dp_core.h | 2 +
> > include/video/exynos_dp.h | 6 +-
> > 4 files changed, 15 insertions(+), 128 deletions(-)
> >
> > diff --git a/Documentation/devicetree/bindings/video/exynos_dp.txt b/Documentation/devicetree/bindings/video/exynos_dp.txt
> > index 84f10c1..a8320e3 100644
> > --- a/Documentation/devicetree/bindings/video/exynos_dp.txt
> > +++ b/Documentation/devicetree/bindings/video/exynos_dp.txt
> > @@ -1,17 +1,6 @@
> > The Exynos display port interface should be configured based on
> > the type of panel connected to it.
> >
> > -We use two nodes:
> > - -dp-controller node
> > - -dptx-phy node(defined inside dp-controller node)
> > -
> > -For the DP-PHY initialization, we use the dptx-phy node.
> > -Required properties for dptx-phy:
> > - -reg:
> > - Base address of DP PHY register.
> > - -samsung,enable-mask:
> > - The bit-mask used to enable/disable DP PHY.
> > -
> > For the Panel initialization, we read data from dp-controller node.
> > Required properties for dp-controller:
> > -compatible:
> > @@ -67,12 +56,6 @@ SOC specific portion:
> > interrupt-parent = <&combiner>;
> > clocks = <&clock 342>;
> > clock-names = "dp";
> > -
> > - dptx-phy {
> > - reg = <0x10040720>;
> > - samsung,enable-mask = <1>;
> > - };
I've an issue here you break dt compatibilty
Best Regards,
J.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH V2 3/3] video: exynos_dp: Use the generic PHY driver
@ 2013-06-28 10:27 ` Jean-Christophe PLAGNIOL-VILLARD
0 siblings, 0 replies; 14+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2013-06-28 10:27 UTC (permalink / raw)
To: linux-arm-kernel
On 12:35 Fri 28 Jun , Felipe Balbi wrote:
> On Fri, Jun 28, 2013 at 04:18:23PM +0900, Jingoo Han wrote:
> > Use the generic PHY API instead of the platform callback to control
> > the DP PHY. The 'phy_label' field is added to the platform data
> > structure to allow PHY lookup on non-dt platforms.
> >
> > Signed-off-by: Jingoo Han <jg1.han@samsung.com>
> > ---
> > .../devicetree/bindings/video/exynos_dp.txt | 17 ---
> > drivers/video/exynos/exynos_dp_core.c | 118 ++------------------
> > drivers/video/exynos/exynos_dp_core.h | 2 +
> > include/video/exynos_dp.h | 6 +-
> > 4 files changed, 15 insertions(+), 128 deletions(-)
> >
> > diff --git a/Documentation/devicetree/bindings/video/exynos_dp.txt b/Documentation/devicetree/bindings/video/exynos_dp.txt
> > index 84f10c1..a8320e3 100644
> > --- a/Documentation/devicetree/bindings/video/exynos_dp.txt
> > +++ b/Documentation/devicetree/bindings/video/exynos_dp.txt
> > @@ -1,17 +1,6 @@
> > The Exynos display port interface should be configured based on
> > the type of panel connected to it.
> >
> > -We use two nodes:
> > - -dp-controller node
> > - -dptx-phy node(defined inside dp-controller node)
> > -
> > -For the DP-PHY initialization, we use the dptx-phy node.
> > -Required properties for dptx-phy:
> > - -reg:
> > - Base address of DP PHY register.
> > - -samsung,enable-mask:
> > - The bit-mask used to enable/disable DP PHY.
> > -
> > For the Panel initialization, we read data from dp-controller node.
> > Required properties for dp-controller:
> > -compatible:
> > @@ -67,12 +56,6 @@ SOC specific portion:
> > interrupt-parent = <&combiner>;
> > clocks = <&clock 342>;
> > clock-names = "dp";
> > -
> > - dptx-phy {
> > - reg = <0x10040720>;
> > - samsung,enable-mask = <1>;
> > - };
I've an issue here you break dt compatibilty
Best Regards,
J.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH V2 3/3] video: exynos_dp: Use the generic PHY driver
@ 2013-06-28 10:27 ` Jean-Christophe PLAGNIOL-VILLARD
0 siblings, 0 replies; 14+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2013-06-28 10:27 UTC (permalink / raw)
To: linux-arm-kernel
On 12:35 Fri 28 Jun , Felipe Balbi wrote:
> On Fri, Jun 28, 2013 at 04:18:23PM +0900, Jingoo Han wrote:
> > Use the generic PHY API instead of the platform callback to control
> > the DP PHY. The 'phy_label' field is added to the platform data
> > structure to allow PHY lookup on non-dt platforms.
> >
> > Signed-off-by: Jingoo Han <jg1.han@samsung.com>
> > ---
> > .../devicetree/bindings/video/exynos_dp.txt | 17 ---
> > drivers/video/exynos/exynos_dp_core.c | 118 ++------------------
> > drivers/video/exynos/exynos_dp_core.h | 2 +
> > include/video/exynos_dp.h | 6 +-
> > 4 files changed, 15 insertions(+), 128 deletions(-)
> >
> > diff --git a/Documentation/devicetree/bindings/video/exynos_dp.txt b/Documentation/devicetree/bindings/video/exynos_dp.txt
> > index 84f10c1..a8320e3 100644
> > --- a/Documentation/devicetree/bindings/video/exynos_dp.txt
> > +++ b/Documentation/devicetree/bindings/video/exynos_dp.txt
> > @@ -1,17 +1,6 @@
> > The Exynos display port interface should be configured based on
> > the type of panel connected to it.
> >
> > -We use two nodes:
> > - -dp-controller node
> > - -dptx-phy node(defined inside dp-controller node)
> > -
> > -For the DP-PHY initialization, we use the dptx-phy node.
> > -Required properties for dptx-phy:
> > - -reg:
> > - Base address of DP PHY register.
> > - -samsung,enable-mask:
> > - The bit-mask used to enable/disable DP PHY.
> > -
> > For the Panel initialization, we read data from dp-controller node.
> > Required properties for dp-controller:
> > -compatible:
> > @@ -67,12 +56,6 @@ SOC specific portion:
> > interrupt-parent = <&combiner>;
> > clocks = <&clock 342>;
> > clock-names = "dp";
> > -
> > - dptx-phy {
> > - reg = <0x10040720>;
> > - samsung,enable-mask = <1>;
> > - };
I've an issue here you break dt compatibilty
Best Regards,
J.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH V2 3/3] video: exynos_dp: Use the generic PHY driver
2013-06-28 10:27 ` Jean-Christophe PLAGNIOL-VILLARD
(?)
@ 2013-06-28 12:04 ` Sylwester Nawrocki
-1 siblings, 0 replies; 14+ messages in thread
From: Sylwester Nawrocki @ 2013-06-28 12:04 UTC (permalink / raw)
To: Jean-Christophe PLAGNIOL-VILLARD
Cc: Felipe Balbi, Grant Likely, linux-fbdev, 'Kukjin Kim',
'Tomasz Figa', Jingoo Han, 'Donghwa Lee',
'Kishon Vijay Abraham I', 'Inki Dae',
'Kyungmin Park',
linux-samsung-soc, devicetree-discuss, linux-arm-kernel,
linux-media
Hi,
On 06/28/2013 12:27 PM, Jean-Christophe PLAGNIOL-VILLARD wrote:
> On 12:35 Fri 28 Jun , Felipe Balbi wrote:
>> > On Fri, Jun 28, 2013 at 04:18:23PM +0900, Jingoo Han wrote:
>>> > > Use the generic PHY API instead of the platform callback to control
>>> > > the DP PHY. The 'phy_label' field is added to the platform data
>>> > > structure to allow PHY lookup on non-dt platforms.
>>> > >
>>> > > Signed-off-by: Jingoo Han <jg1.han@samsung.com>
>>> > > ---
[...]
>>> > > diff --git a/Documentation/devicetree/bindings/video/exynos_dp.txt b/Documentation/devicetree/bindings/video/exynos_dp.txt
>>> > > index 84f10c1..a8320e3 100644
>>> > > --- a/Documentation/devicetree/bindings/video/exynos_dp.txt
>>> > > +++ b/Documentation/devicetree/bindings/video/exynos_dp.txt
>>> > > @@ -1,17 +1,6 @@
>>> > > The Exynos display port interface should be configured based on
>>> > > the type of panel connected to it.
>>> > >
>>> > > -We use two nodes:
>>> > > - -dp-controller node
>>> > > - -dptx-phy node(defined inside dp-controller node)
>>> > > -
>>> > > -For the DP-PHY initialization, we use the dptx-phy node.
>>> > > -Required properties for dptx-phy:
>>> > > - -reg:
>>> > > - Base address of DP PHY register.
>>> > > - -samsung,enable-mask:
>>> > > - The bit-mask used to enable/disable DP PHY.
>>> > > -
>>> > > For the Panel initialization, we read data from dp-controller node.
>>> > > Required properties for dp-controller:
>>> > > -compatible:
>>> > > @@ -67,12 +56,6 @@ SOC specific portion:
>>> > > interrupt-parent = <&combiner>;
>>> > > clocks = <&clock 342>;
>>> > > clock-names = "dp";
>>> > > -
>>> > > - dptx-phy {
>>> > > - reg = <0x10040720>;
>>> > > - samsung,enable-mask = <1>;
>>> > > - };
>
> I've an issue here you break dt compatibilty
Indeed. Ideally the PHYs should be detachable from the controllers.
I'd assume such a change could be acceptable, given that the driver
still supports the original binding.
--
Thanks,
Sylwester
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH V2 3/3] video: exynos_dp: Use the generic PHY driver
@ 2013-06-28 12:04 ` Sylwester Nawrocki
0 siblings, 0 replies; 14+ messages in thread
From: Sylwester Nawrocki @ 2013-06-28 12:04 UTC (permalink / raw)
To: linux-arm-kernel
Hi,
On 06/28/2013 12:27 PM, Jean-Christophe PLAGNIOL-VILLARD wrote:
> On 12:35 Fri 28 Jun , Felipe Balbi wrote:
>> > On Fri, Jun 28, 2013 at 04:18:23PM +0900, Jingoo Han wrote:
>>> > > Use the generic PHY API instead of the platform callback to control
>>> > > the DP PHY. The 'phy_label' field is added to the platform data
>>> > > structure to allow PHY lookup on non-dt platforms.
>>> > >
>>> > > Signed-off-by: Jingoo Han <jg1.han@samsung.com>
>>> > > ---
[...]
>>> > > diff --git a/Documentation/devicetree/bindings/video/exynos_dp.txt b/Documentation/devicetree/bindings/video/exynos_dp.txt
>>> > > index 84f10c1..a8320e3 100644
>>> > > --- a/Documentation/devicetree/bindings/video/exynos_dp.txt
>>> > > +++ b/Documentation/devicetree/bindings/video/exynos_dp.txt
>>> > > @@ -1,17 +1,6 @@
>>> > > The Exynos display port interface should be configured based on
>>> > > the type of panel connected to it.
>>> > >
>>> > > -We use two nodes:
>>> > > - -dp-controller node
>>> > > - -dptx-phy node(defined inside dp-controller node)
>>> > > -
>>> > > -For the DP-PHY initialization, we use the dptx-phy node.
>>> > > -Required properties for dptx-phy:
>>> > > - -reg:
>>> > > - Base address of DP PHY register.
>>> > > - -samsung,enable-mask:
>>> > > - The bit-mask used to enable/disable DP PHY.
>>> > > -
>>> > > For the Panel initialization, we read data from dp-controller node.
>>> > > Required properties for dp-controller:
>>> > > -compatible:
>>> > > @@ -67,12 +56,6 @@ SOC specific portion:
>>> > > interrupt-parent = <&combiner>;
>>> > > clocks = <&clock 342>;
>>> > > clock-names = "dp";
>>> > > -
>>> > > - dptx-phy {
>>> > > - reg = <0x10040720>;
>>> > > - samsung,enable-mask = <1>;
>>> > > - };
>
> I've an issue here you break dt compatibilty
Indeed. Ideally the PHYs should be detachable from the controllers.
I'd assume such a change could be acceptable, given that the driver
still supports the original binding.
--
Thanks,
Sylwester
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH V2 3/3] video: exynos_dp: Use the generic PHY driver
@ 2013-06-28 12:04 ` Sylwester Nawrocki
0 siblings, 0 replies; 14+ messages in thread
From: Sylwester Nawrocki @ 2013-06-28 12:04 UTC (permalink / raw)
To: linux-arm-kernel
Hi,
On 06/28/2013 12:27 PM, Jean-Christophe PLAGNIOL-VILLARD wrote:
> On 12:35 Fri 28 Jun , Felipe Balbi wrote:
>> > On Fri, Jun 28, 2013 at 04:18:23PM +0900, Jingoo Han wrote:
>>> > > Use the generic PHY API instead of the platform callback to control
>>> > > the DP PHY. The 'phy_label' field is added to the platform data
>>> > > structure to allow PHY lookup on non-dt platforms.
>>> > >
>>> > > Signed-off-by: Jingoo Han <jg1.han@samsung.com>
>>> > > ---
[...]
>>> > > diff --git a/Documentation/devicetree/bindings/video/exynos_dp.txt b/Documentation/devicetree/bindings/video/exynos_dp.txt
>>> > > index 84f10c1..a8320e3 100644
>>> > > --- a/Documentation/devicetree/bindings/video/exynos_dp.txt
>>> > > +++ b/Documentation/devicetree/bindings/video/exynos_dp.txt
>>> > > @@ -1,17 +1,6 @@
>>> > > The Exynos display port interface should be configured based on
>>> > > the type of panel connected to it.
>>> > >
>>> > > -We use two nodes:
>>> > > - -dp-controller node
>>> > > - -dptx-phy node(defined inside dp-controller node)
>>> > > -
>>> > > -For the DP-PHY initialization, we use the dptx-phy node.
>>> > > -Required properties for dptx-phy:
>>> > > - -reg:
>>> > > - Base address of DP PHY register.
>>> > > - -samsung,enable-mask:
>>> > > - The bit-mask used to enable/disable DP PHY.
>>> > > -
>>> > > For the Panel initialization, we read data from dp-controller node.
>>> > > Required properties for dp-controller:
>>> > > -compatible:
>>> > > @@ -67,12 +56,6 @@ SOC specific portion:
>>> > > interrupt-parent = <&combiner>;
>>> > > clocks = <&clock 342>;
>>> > > clock-names = "dp";
>>> > > -
>>> > > - dptx-phy {
>>> > > - reg = <0x10040720>;
>>> > > - samsung,enable-mask = <1>;
>>> > > - };
>
> I've an issue here you break dt compatibilty
Indeed. Ideally the PHYs should be detachable from the controllers.
I'd assume such a change could be acceptable, given that the driver
still supports the original binding.
--
Thanks,
Sylwester
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2013-06-28 14:09 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-06-28 7:18 [PATCH V2 3/3] video: exynos_dp: Use the generic PHY driver Jingoo Han
2013-06-28 7:18 ` Jingoo Han
2013-06-28 7:18 ` Jingoo Han
2013-06-28 9:35 ` Felipe Balbi
2013-06-28 9:35 ` Felipe Balbi
2013-06-28 9:35 ` Felipe Balbi
2013-06-28 9:35 ` Felipe Balbi
2013-06-28 10:27 ` Jean-Christophe PLAGNIOL-VILLARD
2013-06-28 10:27 ` Jean-Christophe PLAGNIOL-VILLARD
2013-06-28 10:27 ` Jean-Christophe PLAGNIOL-VILLARD
2013-06-28 10:27 ` Jean-Christophe PLAGNIOL-VILLARD
2013-06-28 12:04 ` Sylwester Nawrocki
2013-06-28 12:04 ` Sylwester Nawrocki
2013-06-28 12:04 ` Sylwester Nawrocki
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.