* [RFC 01/12] clk: propagate parent change up one level
2013-10-21 14:18 [RFC 00/12] Add DRM Exynos HDMI on SoCs from Exynos4 family Tomasz Stanislawski
@ 2013-10-21 14:18 ` Tomasz Stanislawski
2013-10-21 14:18 ` [RFC 02/12] clk: exynos4: export sclk_hdmiphy clock Tomasz Stanislawski
` (11 subsequent siblings)
12 siblings, 0 replies; 20+ messages in thread
From: Tomasz Stanislawski @ 2013-10-21 14:18 UTC (permalink / raw)
To: devicetree, linux-samsung-soc, linux-kernel
Cc: dri-devel, kyungmin.park, t.figa, kishon, sw0312.kim, inki.dae,
rahul.sharma, kgene.kim, s.nawrocki, thomas.abraham, mturquette,
Tomasz Stanislawski
This patch adds support for propagation of setup of clock's parent one level
up.
This feature is helpful when a driver changes topology of its clocks using
clk_set_parent(). The problem occurs when on one platform/SoC driver's clock
is located at MUX output but on the other platform/SoC there is a gated proxy
clock between the MUX and driver's clock. In such a case, driver's code has to
be modified to use one clock for enabling and the other clock for setup of a
parent.
The code updates are avoided by propagating setup of a parent up one level.
Additionally, this patch adds CLK_SET_PARENT_PARENT (sorry for naming) flag to
inform clk-core that clk_set_parent() should be propagated.
Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com>
---
drivers/clk/clk.c | 6 ++++++
include/linux/clk-provider.h | 1 +
2 files changed, 7 insertions(+)
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
index a004769..14eda80 100644
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -1595,6 +1595,12 @@ int clk_set_parent(struct clk *clk, struct clk *parent)
/* try finding the new parent index */
if (parent) {
+ if ((clk->flags & CLK_SET_PARENT_PARENT)
+ && clk->num_parents == 1) {
+ ret = clk_set_parent(clk->parent, parent);
+ goto out;
+ }
+
p_index = clk_fetch_parent_index(clk, parent);
p_rate = parent->rate;
if (p_index == clk->num_parents) {
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h
index 73bdb69..83c98d5 100644
--- a/include/linux/clk-provider.h
+++ b/include/linux/clk-provider.h
@@ -29,6 +29,7 @@
#define CLK_IS_BASIC BIT(5) /* Basic clk, can't do a to_clk_foo() */
#define CLK_GET_RATE_NOCACHE BIT(6) /* do not use the cached clk rate */
#define CLK_SET_RATE_NO_REPARENT BIT(7) /* don't re-parent on rate change */
+#define CLK_SET_PARENT_PARENT BIT(8) /* propagate parent change up one level */
struct clk_hw;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [RFC 02/12] clk: exynos4: export sclk_hdmiphy clock
2013-10-21 14:18 [RFC 00/12] Add DRM Exynos HDMI on SoCs from Exynos4 family Tomasz Stanislawski
2013-10-21 14:18 ` [RFC 01/12] clk: propagate parent change up one level Tomasz Stanislawski
@ 2013-10-21 14:18 ` Tomasz Stanislawski
2013-10-21 14:18 ` [RFC 03/12] clk: exynos4: enable clk_set_parent() propagation for sclk_hdmi and sclk_mixer clocks Tomasz Stanislawski
` (10 subsequent siblings)
12 siblings, 0 replies; 20+ messages in thread
From: Tomasz Stanislawski @ 2013-10-21 14:18 UTC (permalink / raw)
To: devicetree, linux-samsung-soc, linux-kernel
Cc: dri-devel, kyungmin.park, t.figa, kishon, sw0312.kim, inki.dae,
rahul.sharma, kgene.kim, s.nawrocki, thomas.abraham, mturquette,
Tomasz Stanislawski
Export sclk_hdmiphy clock to be usable from DT.
Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com>
---
.../devicetree/bindings/clock/exynos4-clock.txt | 1 +
drivers/clk/samsung/clk-exynos4.c | 4 ++--
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/Documentation/devicetree/bindings/clock/exynos4-clock.txt b/Documentation/devicetree/bindings/clock/exynos4-clock.txt
index c6bf8a6..cb08f5d 100644
--- a/Documentation/devicetree/bindings/clock/exynos4-clock.txt
+++ b/Documentation/devicetree/bindings/clock/exynos4-clock.txt
@@ -46,6 +46,7 @@ Exynos4 SoC and this is specified where applicable.
mout_mpll_user_c 18 Exynos4x12
mout_core 19
mout_apll 20
+ sclk_hdmiphy 21
[Clock Gate for Special Clocks]
diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c
index ad5ff50..df79ca6 100644
--- a/drivers/clk/samsung/clk-exynos4.c
+++ b/drivers/clk/samsung/clk-exynos4.c
@@ -148,7 +148,7 @@ enum exynos4_clks {
xxti, xusbxti, fin_pll, fout_apll, fout_mpll, fout_epll, fout_vpll,
sclk_apll, sclk_mpll, sclk_epll, sclk_vpll, arm_clk, aclk200, aclk100,
aclk160, aclk133, mout_mpll_user_t, mout_mpll_user_c, mout_core,
- mout_apll, /* 20 */
+ mout_apll, sclk_hdmiphy, /* 21 */
/* gate for special clocks (sclk) */
sclk_fimc0 = 128, sclk_fimc1, sclk_fimc2, sclk_fimc3, sclk_cam0,
@@ -354,7 +354,7 @@ static struct samsung_fixed_rate_clock exynos4_fixed_rate_ext_clks[] __initdata
/* fixed rate clocks generated inside the soc */
static struct samsung_fixed_rate_clock exynos4_fixed_rate_clks[] __initdata = {
FRATE(none, "sclk_hdmi24m", NULL, CLK_IS_ROOT, 24000000),
- FRATE(none, "sclk_hdmiphy", NULL, CLK_IS_ROOT, 27000000),
+ FRATE(sclk_hdmiphy, "sclk_hdmiphy", NULL, CLK_IS_ROOT, 27000000),
FRATE(none, "sclk_usbphy0", NULL, CLK_IS_ROOT, 48000000),
};
--
1.7.9.5
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [RFC 03/12] clk: exynos4: enable clk_set_parent() propagation for sclk_hdmi and sclk_mixer clocks
2013-10-21 14:18 [RFC 00/12] Add DRM Exynos HDMI on SoCs from Exynos4 family Tomasz Stanislawski
2013-10-21 14:18 ` [RFC 01/12] clk: propagate parent change up one level Tomasz Stanislawski
2013-10-21 14:18 ` [RFC 02/12] clk: exynos4: export sclk_hdmiphy clock Tomasz Stanislawski
@ 2013-10-21 14:18 ` Tomasz Stanislawski
2013-10-21 14:18 ` [RFC 04/12] phy: Add simple-phy driver Tomasz Stanislawski
` (9 subsequent siblings)
12 siblings, 0 replies; 20+ messages in thread
From: Tomasz Stanislawski @ 2013-10-21 14:18 UTC (permalink / raw)
To: devicetree, linux-samsung-soc, linux-kernel
Cc: Tomasz Stanislawski, kgene.kim, mturquette, sw0312.kim, dri-devel,
kishon, kyungmin.park, s.nawrocki, rahul.sharma
This patch enables clk_set_parent() propagation for clocks used
by s5p-tv and exynos-drm drivers.
Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com>
---
drivers/clk/samsung/clk-exynos4.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c
index df79ca6..1f58b7c 100644
--- a/drivers/clk/samsung/clk-exynos4.c
+++ b/drivers/clk/samsung/clk-exynos4.c
@@ -605,7 +605,8 @@ static struct samsung_gate_clock exynos4_gate_clks[] __initdata = {
* the device name and clock alias names specified below for some
* of the clocks can be removed.
*/
- GATE(sclk_hdmi, "sclk_hdmi", "mout_hdmi", SRC_MASK_TV, 0, 0, 0),
+ GATE(sclk_hdmi, "sclk_hdmi", "mout_hdmi", SRC_MASK_TV, 0,
+ CLK_SET_PARENT_PARENT, 0),
GATE(sclk_spdif, "sclk_spdif", "mout_spdif", SRC_MASK_PERIL1, 8, 0, 0),
GATE(jpeg, "jpeg", "aclk160", GATE_IP_CAM, 6, 0, 0),
GATE(mie0, "mie0", "aclk160", GATE_IP_LCD0, 1, 0, 0),
@@ -801,7 +802,8 @@ static struct samsung_gate_clock exynos4210_gate_clks[] __initdata = {
E4210_SRC_MASK_LCD1, 12, CLK_SET_RATE_PARENT, 0),
GATE(sclk_sata, "sclk_sata", "div_sata",
SRC_MASK_FSYS, 24, CLK_SET_RATE_PARENT, 0),
- GATE(sclk_mixer, "sclk_mixer", "mout_mixer", SRC_MASK_TV, 4, 0, 0),
+ GATE(sclk_mixer, "sclk_mixer", "mout_mixer", SRC_MASK_TV, 4,
+ CLK_SET_PARENT_PARENT, 0),
GATE(sclk_dac, "sclk_dac", "mout_dac", SRC_MASK_TV, 8, 0, 0),
GATE(tsadc, "tsadc", "aclk100", GATE_IP_PERIL, 15,
0, 0),
--
1.7.9.5
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [RFC 04/12] phy: Add simple-phy driver
2013-10-21 14:18 [RFC 00/12] Add DRM Exynos HDMI on SoCs from Exynos4 family Tomasz Stanislawski
` (2 preceding siblings ...)
2013-10-21 14:18 ` [RFC 03/12] clk: exynos4: enable clk_set_parent() propagation for sclk_hdmi and sclk_mixer clocks Tomasz Stanislawski
@ 2013-10-21 14:18 ` Tomasz Stanislawski
2013-10-24 15:52 ` Kishon Vijay Abraham I
2013-10-21 14:18 ` [RFC 05/12] phy: use of_phy_simple_xlate for NULL xlate function Tomasz Stanislawski
` (8 subsequent siblings)
12 siblings, 1 reply; 20+ messages in thread
From: Tomasz Stanislawski @ 2013-10-21 14:18 UTC (permalink / raw)
To: devicetree, linux-samsung-soc, linux-kernel
Cc: dri-devel, kyungmin.park, t.figa, kishon, sw0312.kim, inki.dae,
rahul.sharma, kgene.kim, s.nawrocki, thomas.abraham, mturquette,
Tomasz Stanislawski
Add simple-phy driver to support a single register
PHY interfaces present on Exynos4 SoC.
Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com>
---
drivers/phy/Kconfig | 5 ++
drivers/phy/Makefile | 1 +
drivers/phy/phy-simple.c | 128 ++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 134 insertions(+)
create mode 100644 drivers/phy/phy-simple.c
diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig
index ac239ac..619c657 100644
--- a/drivers/phy/Kconfig
+++ b/drivers/phy/Kconfig
@@ -38,4 +38,9 @@ config TWL4030_USB
This transceiver supports high and full speed devices plus,
in host mode, low speed.
+config PHY_SIMPLE
+ tristate "Simple PHY driver"
+ help
+ Support for PHY controllers configured using single register.
+
endmenu
diff --git a/drivers/phy/Makefile b/drivers/phy/Makefile
index 0dd8a98..3d68e19 100644
--- a/drivers/phy/Makefile
+++ b/drivers/phy/Makefile
@@ -5,3 +5,4 @@
obj-$(CONFIG_GENERIC_PHY) += phy-core.o
obj-$(CONFIG_OMAP_USB2) += phy-omap-usb2.o
obj-$(CONFIG_TWL4030_USB) += phy-twl4030-usb.o
+obj-$(CONFIG_PHY_SIMPLE) += phy-simple.o
diff --git a/drivers/phy/phy-simple.c b/drivers/phy/phy-simple.c
new file mode 100644
index 0000000..4a28af7
--- /dev/null
+++ b/drivers/phy/phy-simple.c
@@ -0,0 +1,128 @@
+/*
+ * Simple PHY driver
+ *
+ * Copyright (C) 2013 Samsung Electronics Co., Ltd.
+ * Author: Tomasz Stanislawski <t.stanislaws@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/io.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/phy/phy.h>
+#include <linux/platform_device.h>
+#include <linux/spinlock.h>
+
+struct simple_phy {
+ spinlock_t slock;
+ u32 on_value;
+ u32 off_value;
+ u32 mask;
+ void __iomem *regs;
+};
+
+static int sphy_set(struct simple_phy *sphy, bool on)
+{
+ u32 reg;
+
+ spin_lock(&sphy->slock);
+
+ reg = readl(sphy->regs);
+ reg &= ~sphy->mask;
+ reg |= sphy->mask & (on ? sphy->on_value : sphy->off_value);
+ writel(reg, sphy->regs);
+
+ spin_unlock(&sphy->slock);
+
+ return 0;
+}
+
+static int simple_phy_power_on(struct phy *phy)
+{
+ return sphy_set(phy_get_drvdata(phy), 1);
+}
+
+static int simple_phy_power_off(struct phy *phy)
+{
+ return sphy_set(phy_get_drvdata(phy), 0);
+}
+
+static struct phy_ops simple_phy_ops = {
+ .power_on = simple_phy_power_on,
+ .power_off = simple_phy_power_off,
+ .owner = THIS_MODULE,
+};
+
+static int simple_phy_probe(struct platform_device *pdev)
+{
+ struct device *dev = &pdev->dev;
+ struct simple_phy *sphy;
+ struct resource *res;
+ struct phy_provider *phy_provider;
+ struct phy *phy;
+
+ sphy = devm_kzalloc(dev, sizeof(*sphy), GFP_KERNEL);
+ if (!sphy)
+ return -ENOMEM;
+
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+
+ sphy->regs = devm_ioremap_resource(dev, res);
+ if (IS_ERR(sphy->regs)) {
+ dev_err(dev, "failed to ioremap registers\n");
+ return PTR_ERR(sphy->regs);
+ }
+
+ spin_lock_init(&sphy->slock);
+
+ phy_provider = devm_of_phy_provider_register(dev, NULL);
+ if (IS_ERR(phy_provider)) {
+ dev_err(dev, "failed to register PHY provider\n");
+ return PTR_ERR(phy_provider);
+ }
+
+ phy = devm_phy_create(dev, &simple_phy_ops, NULL);
+ if (IS_ERR(phy)) {
+ dev_err(dev, "failed to create PHY\n");
+ return PTR_ERR(phy);
+ }
+
+ sphy->mask = 1;
+ sphy->on_value = ~0;
+ sphy->off_value = 0;
+
+ of_property_read_u32(dev->of_node, "mask", &sphy->mask);
+ of_property_read_u32(dev->of_node, "on-value", &sphy->on_value);
+ of_property_read_u32(dev->of_node, "off-value", &sphy->off_value);
+
+ phy_set_drvdata(phy, sphy);
+
+ dev_info(dev, "probe successful\n");
+
+ return 0;
+}
+
+static const struct of_device_id simple_phy_of_match[] = {
+ { .compatible = "simple-phy" },
+ { },
+};
+MODULE_DEVICE_TABLE(of, simple_phy_of_match);
+
+static struct platform_driver simple_phy_driver = {
+ .probe = simple_phy_probe,
+ .driver = {
+ .of_match_table = simple_phy_of_match,
+ .name = "simple-phy",
+ .owner = THIS_MODULE,
+ }
+};
+module_platform_driver(simple_phy_driver);
+
+MODULE_DESCRIPTION("Simple PHY driver");
+MODULE_AUTHOR("Tomasz Stanislawski <t.stanislaws@samsung.com>");
+MODULE_LICENSE("GPL v2");
--
1.7.9.5
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [RFC 04/12] phy: Add simple-phy driver
2013-10-21 14:18 ` [RFC 04/12] phy: Add simple-phy driver Tomasz Stanislawski
@ 2013-10-24 15:52 ` Kishon Vijay Abraham I
2013-10-25 7:51 ` Tomasz Stanislawski
0 siblings, 1 reply; 20+ messages in thread
From: Kishon Vijay Abraham I @ 2013-10-24 15:52 UTC (permalink / raw)
To: Tomasz Stanislawski
Cc: devicetree, linux-samsung-soc, linux-kernel, dri-devel,
kyungmin.park, t.figa, sw0312.kim, inki.dae, rahul.sharma,
kgene.kim, s.nawrocki, thomas.abraham, mturquette
Hi,
On Monday 21 October 2013 07:48 PM, Tomasz Stanislawski wrote:
> Add simple-phy driver to support a single register
> PHY interfaces present on Exynos4 SoC.
How are these PHY interfaces modelled in the SoC? Where does the register
actually reside?
>
> Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com>
> ---
> drivers/phy/Kconfig | 5 ++
> drivers/phy/Makefile | 1 +
> drivers/phy/phy-simple.c | 128 ++++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 134 insertions(+)
> create mode 100644 drivers/phy/phy-simple.c
>
> diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig
> index ac239ac..619c657 100644
> --- a/drivers/phy/Kconfig
> +++ b/drivers/phy/Kconfig
> @@ -38,4 +38,9 @@ config TWL4030_USB
> This transceiver supports high and full speed devices plus,
> in host mode, low speed.
>
> +config PHY_SIMPLE
> + tristate "Simple PHY driver"
This is too generic a name to be used. Lets name it something specific to what
it is used for (EXYNOS/HDMI.. ?).
> + help
> + Support for PHY controllers configured using single register.
> +
> endmenu
> diff --git a/drivers/phy/Makefile b/drivers/phy/Makefile
> index 0dd8a98..3d68e19 100644
> --- a/drivers/phy/Makefile
> +++ b/drivers/phy/Makefile
> @@ -5,3 +5,4 @@
> obj-$(CONFIG_GENERIC_PHY) += phy-core.o
> obj-$(CONFIG_OMAP_USB2) += phy-omap-usb2.o
> obj-$(CONFIG_TWL4030_USB) += phy-twl4030-usb.o
> +obj-$(CONFIG_PHY_SIMPLE) += phy-simple.o
> diff --git a/drivers/phy/phy-simple.c b/drivers/phy/phy-simple.c
> new file mode 100644
> index 0000000..4a28af7
> --- /dev/null
> +++ b/drivers/phy/phy-simple.c
> @@ -0,0 +1,128 @@
> +/*
> + * Simple PHY driver
> + *
> + * Copyright (C) 2013 Samsung Electronics Co., Ltd.
> + * Author: Tomasz Stanislawski <t.stanislaws@samsung.com>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +#include <linux/io.h>
> +#include <linux/kernel.h>
> +#include <linux/module.h>
> +#include <linux/of.h>
> +#include <linux/of_address.h>
> +#include <linux/phy/phy.h>
> +#include <linux/platform_device.h>
> +#include <linux/spinlock.h>
> +
> +struct simple_phy {
> + spinlock_t slock;
> + u32 on_value;
> + u32 off_value;
> + u32 mask;
> + void __iomem *regs;
> +};
> +
> +static int sphy_set(struct simple_phy *sphy, bool on)
> +{
> + u32 reg;
> +
> + spin_lock(&sphy->slock);
Lets add spin_lock only when it is absolutely necessary. When your PHY provider
implements only a single PHY, it is not needed. phy_power_on and phy_power_off
is already protected by the framework.
> +
> + reg = readl(sphy->regs);
> + reg &= ~sphy->mask;
> + reg |= sphy->mask & (on ? sphy->on_value : sphy->off_value);
> + writel(reg, sphy->regs);
> +
> + spin_unlock(&sphy->slock);
> +
> + return 0;
> +}
> +
> +static int simple_phy_power_on(struct phy *phy)
> +{
> + return sphy_set(phy_get_drvdata(phy), 1);
> +}
> +
> +static int simple_phy_power_off(struct phy *phy)
> +{
> + return sphy_set(phy_get_drvdata(phy), 0);
> +}
> +
> +static struct phy_ops simple_phy_ops = {
> + .power_on = simple_phy_power_on,
> + .power_off = simple_phy_power_off,
> + .owner = THIS_MODULE,
> +};
> +
> +static int simple_phy_probe(struct platform_device *pdev)
> +{
> + struct device *dev = &pdev->dev;
> + struct simple_phy *sphy;
> + struct resource *res;
> + struct phy_provider *phy_provider;
> + struct phy *phy;
> +
> + sphy = devm_kzalloc(dev, sizeof(*sphy), GFP_KERNEL);
> + if (!sphy)
> + return -ENOMEM;
> +
> + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> +
> + sphy->regs = devm_ioremap_resource(dev, res);
> + if (IS_ERR(sphy->regs)) {
> + dev_err(dev, "failed to ioremap registers\n");
> + return PTR_ERR(sphy->regs);
> + }
> +
> + spin_lock_init(&sphy->slock);
> +
> + phy_provider = devm_of_phy_provider_register(dev, NULL);
pass 'of_phy_simple_xlate' instead of NULL.
> + if (IS_ERR(phy_provider)) {
> + dev_err(dev, "failed to register PHY provider\n");
> + return PTR_ERR(phy_provider);
> + }
> +
> + phy = devm_phy_create(dev, &simple_phy_ops, NULL);
> + if (IS_ERR(phy)) {
> + dev_err(dev, "failed to create PHY\n");
> + return PTR_ERR(phy);
> + }
> +
> + sphy->mask = 1;
> + sphy->on_value = ~0;
> + sphy->off_value = 0;
> +
> + of_property_read_u32(dev->of_node, "mask", &sphy->mask);
This means your driver will depend on dt data to describe how the register
should look like. Not a good idea.
> + of_property_read_u32(dev->of_node, "on-value", &sphy->on_value);
> + of_property_read_u32(dev->of_node, "off-value", &sphy->off_value);
> +
> + phy_set_drvdata(phy, sphy);
> +
> + dev_info(dev, "probe successful\n");
Lets not make the boot noisy.
Thanks
Kishon
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [RFC 04/12] phy: Add simple-phy driver
2013-10-24 15:52 ` Kishon Vijay Abraham I
@ 2013-10-25 7:51 ` Tomasz Stanislawski
2013-11-04 7:08 ` Kishon Vijay Abraham I
0 siblings, 1 reply; 20+ messages in thread
From: Tomasz Stanislawski @ 2013-10-25 7:51 UTC (permalink / raw)
To: Kishon Vijay Abraham I
Cc: devicetree, linux-samsung-soc, linux-kernel, dri-devel,
kyungmin.park, t.figa, sw0312.kim, inki.dae, rahul.sharma,
kgene.kim, s.nawrocki, thomas.abraham, mturquette
Hi,
Please refer to the comments below.
On 10/24/2013 05:52 PM, Kishon Vijay Abraham I wrote:
> Hi,
>
> On Monday 21 October 2013 07:48 PM, Tomasz Stanislawski wrote:
>> Add simple-phy driver to support a single register
>> PHY interfaces present on Exynos4 SoC.
>
> How are these PHY interfaces modelled in the SoC? Where does the register
> actually reside?
Initially, I was planning to add PHY for HDMI_PHY register in
power management register set on s5pv310 soc.
However other PHYs use very similar interface (setting bit 0).
This includes DAC_PHY, ADC_PHY, PCIe_PHY, SATA_PHY.
Moreover it suits well to USBDEVICE_PHY, USBHOST_PHY.
That is why I thought about using something more generic
to handle all those phys without introducing a herd of
200-lines-long drivers.
>>
>> Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com>
>> ---
>> drivers/phy/Kconfig | 5 ++
>> drivers/phy/Makefile | 1 +
>> drivers/phy/phy-simple.c | 128 ++++++++++++++++++++++++++++++++++++++++++++++
>> 3 files changed, 134 insertions(+)
>> create mode 100644 drivers/phy/phy-simple.c
>>
>> diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig
>> index ac239ac..619c657 100644
>> --- a/drivers/phy/Kconfig
>> +++ b/drivers/phy/Kconfig
>> @@ -38,4 +38,9 @@ config TWL4030_USB
>> This transceiver supports high and full speed devices plus,
>> in host mode, low speed.
>>
>> +config PHY_SIMPLE
>> + tristate "Simple PHY driver"
>
> This is too generic a name to be used. Lets name it something specific to what
> it is used for (EXYNOS/HDMI.. ?).
Ok. It could be renamed to EXYNOS-SIMPLE-PHY or EXYNOS-1BIT-PHY or EXYNOS-GENERIC-PHY
or something similar. Any ideas?
>> + help
>> + Support for PHY controllers configured using single register.
>> +
>> endmenu
>> diff --git a/drivers/phy/Makefile b/drivers/phy/Makefile
>> index 0dd8a98..3d68e19 100644
>> --- a/drivers/phy/Makefile
>> +++ b/drivers/phy/Makefile
>> @@ -5,3 +5,4 @@
>> obj-$(CONFIG_GENERIC_PHY) += phy-core.o
>> obj-$(CONFIG_OMAP_USB2) += phy-omap-usb2.o
>> obj-$(CONFIG_TWL4030_USB) += phy-twl4030-usb.o
>> +obj-$(CONFIG_PHY_SIMPLE) += phy-simple.o
>> diff --git a/drivers/phy/phy-simple.c b/drivers/phy/phy-simple.c
>> new file mode 100644
>> index 0000000..4a28af7
>> --- /dev/null
>> +++ b/drivers/phy/phy-simple.c
>> @@ -0,0 +1,128 @@
>> +/*
>> + * Simple PHY driver
>> + *
>> + * Copyright (C) 2013 Samsung Electronics Co., Ltd.
>> + * Author: Tomasz Stanislawski <t.stanislaws@samsung.com>
>> + *
>> + * This program is free software; you can redistribute it and/or modify
>> + * it under the terms of the GNU General Public License version 2 as
>> + * published by the Free Software Foundation.
>> + */
>> +
>> +#include <linux/io.h>
>> +#include <linux/kernel.h>
>> +#include <linux/module.h>
>> +#include <linux/of.h>
>> +#include <linux/of_address.h>
>> +#include <linux/phy/phy.h>
>> +#include <linux/platform_device.h>
>> +#include <linux/spinlock.h>
>> +
>> +struct simple_phy {
>> + spinlock_t slock;
>> + u32 on_value;
>> + u32 off_value;
>> + u32 mask;
>> + void __iomem *regs;
>> +};
>> +
>> +static int sphy_set(struct simple_phy *sphy, bool on)
>> +{
>> + u32 reg;
>> +
>> + spin_lock(&sphy->slock);
>
> Lets add spin_lock only when it is absolutely necessary. When your PHY provider
> implements only a single PHY, it is not needed. phy_power_on and phy_power_off
> is already protected by the framework.
ok
>> +
>> + reg = readl(sphy->regs);
>> + reg &= ~sphy->mask;
>> + reg |= sphy->mask & (on ? sphy->on_value : sphy->off_value);
>> + writel(reg, sphy->regs);
>> +
>> + spin_unlock(&sphy->slock);
>> +
>> + return 0;
>> +}
>> +
>> +static int simple_phy_power_on(struct phy *phy)
>> +{
>> + return sphy_set(phy_get_drvdata(phy), 1);
>> +}
>> +
>> +static int simple_phy_power_off(struct phy *phy)
>> +{
>> + return sphy_set(phy_get_drvdata(phy), 0);
>> +}
>> +
>> +static struct phy_ops simple_phy_ops = {
>> + .power_on = simple_phy_power_on,
>> + .power_off = simple_phy_power_off,
>> + .owner = THIS_MODULE,
>> +};
>> +
>> +static int simple_phy_probe(struct platform_device *pdev)
>> +{
>> + struct device *dev = &pdev->dev;
>> + struct simple_phy *sphy;
>> + struct resource *res;
>> + struct phy_provider *phy_provider;
>> + struct phy *phy;
>> +
>> + sphy = devm_kzalloc(dev, sizeof(*sphy), GFP_KERNEL);
>> + if (!sphy)
>> + return -ENOMEM;
>> +
>> + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>> +
>> + sphy->regs = devm_ioremap_resource(dev, res);
>> + if (IS_ERR(sphy->regs)) {
>> + dev_err(dev, "failed to ioremap registers\n");
>> + return PTR_ERR(sphy->regs);
>> + }
>> +
>> + spin_lock_init(&sphy->slock);
>> +
>> + phy_provider = devm_of_phy_provider_register(dev, NULL);
>
> pass 'of_phy_simple_xlate' instead of NULL.
>> + if (IS_ERR(phy_provider)) {
>> + dev_err(dev, "failed to register PHY provider\n");
>> + return PTR_ERR(phy_provider);
>> + }
>> +
>> + phy = devm_phy_create(dev, &simple_phy_ops, NULL);
>> + if (IS_ERR(phy)) {
>> + dev_err(dev, "failed to create PHY\n");
>> + return PTR_ERR(phy);
>> + }
>> +
>> + sphy->mask = 1;
>> + sphy->on_value = ~0;
>> + sphy->off_value = 0;
>> +
>> + of_property_read_u32(dev->of_node, "mask", &sphy->mask);
>
> This means your driver will depend on dt data to describe how the register
> should look like. Not a good idea.
I can remove it. No problem. The driver can justt use fixed
mask=1,on-value=1,off-value=0.
Adding mentioned attributes greatly improves driver flexibility
but such a flexibility is not needed currently for s5pv310 phys.
But frankly, I do not exactly follow what is a rationale for such police
in DT. It forces developer to write a lot of redundant code.
Moreover, some clock drivers seams to violate it.
Clock "picochip,pc3x3-gated-clk" is an example. One can find similar tricks
in pinctrl.
>> + of_property_read_u32(dev->of_node, "on-value", &sphy->on_value);
>> + of_property_read_u32(dev->of_node, "off-value", &sphy->off_value);
>> +
>> + phy_set_drvdata(phy, sphy);
>> +
>> + dev_info(dev, "probe successful\n");
> Lets not make the boot noisy.
>
ok. s/dev_info/dev_dbg is good enough?
> Thanks
> Kishon
>
Could you take a look on other patches in this RFC?
Regards,
Tomasz Stanislawski
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [RFC 04/12] phy: Add simple-phy driver
2013-10-25 7:51 ` Tomasz Stanislawski
@ 2013-11-04 7:08 ` Kishon Vijay Abraham I
0 siblings, 0 replies; 20+ messages in thread
From: Kishon Vijay Abraham I @ 2013-11-04 7:08 UTC (permalink / raw)
To: Tomasz Stanislawski
Cc: devicetree, linux-samsung-soc, linux-kernel, dri-devel,
kyungmin.park, t.figa, sw0312.kim, inki.dae, rahul.sharma,
kgene.kim, s.nawrocki, thomas.abraham, mturquette
Hi,
On Friday 25 October 2013 01:21 PM, Tomasz Stanislawski wrote:
> Hi,
> Please refer to the comments below.
>
> On 10/24/2013 05:52 PM, Kishon Vijay Abraham I wrote:
>> Hi,
>>
>> On Monday 21 October 2013 07:48 PM, Tomasz Stanislawski wrote:
>>> Add simple-phy driver to support a single register
>>> PHY interfaces present on Exynos4 SoC.
>>
>> How are these PHY interfaces modelled in the SoC? Where does the register
>> actually reside?
>
> Initially, I was planning to add PHY for HDMI_PHY register in
> power management register set on s5pv310 soc.
If that register is part of the power management register space, I don't
think it justifies creating a PHY driver for it.
>
> However other PHYs use very similar interface (setting bit 0).
> This includes DAC_PHY, ADC_PHY, PCIe_PHY, SATA_PHY.
> Moreover it suits well to USBDEVICE_PHY, USBHOST_PHY.
How is it currently being done for these drivers? Is it being done in
the patches sent by Kamil or Vivek?
Thanks
Kishon
^ permalink raw reply [flat|nested] 20+ messages in thread
* [RFC 05/12] phy: use of_phy_simple_xlate for NULL xlate function
2013-10-21 14:18 [RFC 00/12] Add DRM Exynos HDMI on SoCs from Exynos4 family Tomasz Stanislawski
` (3 preceding siblings ...)
2013-10-21 14:18 ` [RFC 04/12] phy: Add simple-phy driver Tomasz Stanislawski
@ 2013-10-21 14:18 ` Tomasz Stanislawski
2013-10-24 15:33 ` Kishon Vijay Abraham I
2013-10-21 14:18 ` [RFC 06/12] Revert "drm/exynos: add mout_hdmi clock in hdmi driver to change parent" Tomasz Stanislawski
` (7 subsequent siblings)
12 siblings, 1 reply; 20+ messages in thread
From: Tomasz Stanislawski @ 2013-10-21 14:18 UTC (permalink / raw)
To: devicetree, linux-samsung-soc, linux-kernel
Cc: dri-devel, kyungmin.park, t.figa, kishon, sw0312.kim, inki.dae,
rahul.sharma, kgene.kim, s.nawrocki, thomas.abraham, mturquette,
Tomasz Stanislawski
Use default handler of_phy_simple_xlate() when NULL is passed as argument to
of_phy_provider_register().
Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com>
---
drivers/phy/phy-core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
index 03cf8fb..c38ae1e7 100644
--- a/drivers/phy/phy-core.c
+++ b/drivers/phy/phy-core.c
@@ -575,7 +575,7 @@ struct phy_provider *__of_phy_provider_register(struct device *dev,
phy_provider->dev = dev;
phy_provider->owner = owner;
- phy_provider->of_xlate = of_xlate;
+ phy_provider->of_xlate = of_xlate ? of_xlate : of_phy_simple_xlate;
mutex_lock(&phy_provider_mutex);
list_add_tail(&phy_provider->list, &phy_provider_list);
--
1.7.9.5
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [RFC 05/12] phy: use of_phy_simple_xlate for NULL xlate function
2013-10-21 14:18 ` [RFC 05/12] phy: use of_phy_simple_xlate for NULL xlate function Tomasz Stanislawski
@ 2013-10-24 15:33 ` Kishon Vijay Abraham I
0 siblings, 0 replies; 20+ messages in thread
From: Kishon Vijay Abraham I @ 2013-10-24 15:33 UTC (permalink / raw)
To: Tomasz Stanislawski
Cc: devicetree, linux-samsung-soc, linux-kernel, dri-devel,
kyungmin.park, t.figa, sw0312.kim, inki.dae, rahul.sharma,
kgene.kim, s.nawrocki, thomas.abraham, mturquette
Hi,
On Monday 21 October 2013 07:48 PM, Tomasz Stanislawski wrote:
> Use default handler of_phy_simple_xlate() when NULL is passed as argument to
> of_phy_provider_register().
>
> Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com>
> ---
> drivers/phy/phy-core.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
> index 03cf8fb..c38ae1e7 100644
> --- a/drivers/phy/phy-core.c
> +++ b/drivers/phy/phy-core.c
> @@ -575,7 +575,7 @@ struct phy_provider *__of_phy_provider_register(struct device *dev,
>
> phy_provider->dev = dev;
> phy_provider->owner = owner;
> - phy_provider->of_xlate = of_xlate;
> + phy_provider->of_xlate = of_xlate ? of_xlate : of_phy_simple_xlate;
Lets allow the phy provider to pass the correct of_xlate (of_phy_simple_xlate
is exported anyway). Instead you can modify the patch to check for of_xlate and
do a WARN if it is NULL.
Thanks
Kishon
^ permalink raw reply [flat|nested] 20+ messages in thread
* [RFC 06/12] Revert "drm/exynos: add mout_hdmi clock in hdmi driver to change parent"
2013-10-21 14:18 [RFC 00/12] Add DRM Exynos HDMI on SoCs from Exynos4 family Tomasz Stanislawski
` (4 preceding siblings ...)
2013-10-21 14:18 ` [RFC 05/12] phy: use of_phy_simple_xlate for NULL xlate function Tomasz Stanislawski
@ 2013-10-21 14:18 ` Tomasz Stanislawski
2013-10-21 14:18 ` [RFC 07/12] drm: exynos: hdmi: use hdmiphy as PHY Tomasz Stanislawski
` (6 subsequent siblings)
12 siblings, 0 replies; 20+ messages in thread
From: Tomasz Stanislawski @ 2013-10-21 14:18 UTC (permalink / raw)
To: devicetree, linux-samsung-soc, linux-kernel
Cc: dri-devel, kyungmin.park, t.figa, kishon, sw0312.kim, inki.dae,
rahul.sharma, kgene.kim, s.nawrocki, thomas.abraham, mturquette,
Tomasz Stanislawski
This reverts commit 59956d35a8618235ea715280b49447bb36f2c975.
---
drivers/gpu/drm/exynos/exynos_hdmi.c | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c
index a0e10ae..fcfa23a 100644
--- a/drivers/gpu/drm/exynos/exynos_hdmi.c
+++ b/drivers/gpu/drm/exynos/exynos_hdmi.c
@@ -83,7 +83,6 @@ struct hdmi_resources {
struct clk *sclk_pixel;
struct clk *sclk_hdmiphy;
struct clk *hdmiphy;
- struct clk *mout_hdmi;
struct regulator_bulk_data *regul_bulk;
int regul_count;
};
@@ -1113,7 +1112,7 @@ static void hdmi_v13_mode_apply(struct hdmi_context *hdata)
}
clk_disable_unprepare(hdata->res.sclk_hdmi);
- clk_set_parent(hdata->res.mout_hdmi, hdata->res.sclk_hdmiphy);
+ clk_set_parent(hdata->res.sclk_hdmi, hdata->res.sclk_hdmiphy);
clk_prepare_enable(hdata->res.sclk_hdmi);
/* enable HDMI and timing generator */
@@ -1280,7 +1279,7 @@ static void hdmi_v14_mode_apply(struct hdmi_context *hdata)
}
clk_disable_unprepare(hdata->res.sclk_hdmi);
- clk_set_parent(hdata->res.mout_hdmi, hdata->res.sclk_hdmiphy);
+ clk_set_parent(hdata->res.sclk_hdmi, hdata->res.sclk_hdmiphy);
clk_prepare_enable(hdata->res.sclk_hdmi);
/* enable HDMI and timing generator */
@@ -1306,7 +1305,7 @@ static void hdmiphy_conf_reset(struct hdmi_context *hdata)
u32 reg;
clk_disable_unprepare(hdata->res.sclk_hdmi);
- clk_set_parent(hdata->res.mout_hdmi, hdata->res.sclk_pixel);
+ clk_set_parent(hdata->res.sclk_hdmi, hdata->res.sclk_pixel);
clk_prepare_enable(hdata->res.sclk_hdmi);
/* operation mode */
@@ -1815,13 +1814,8 @@ static int hdmi_resources_init(struct hdmi_context *hdata)
DRM_ERROR("failed to get clock 'hdmiphy'\n");
goto fail;
}
- res->mout_hdmi = devm_clk_get(dev, "mout_hdmi");
- if (IS_ERR(res->mout_hdmi)) {
- DRM_ERROR("failed to get clock 'mout_hdmi'\n");
- goto fail;
- }
- clk_set_parent(res->mout_hdmi, res->sclk_pixel);
+ clk_set_parent(res->sclk_hdmi, res->sclk_pixel);
res->regul_bulk = devm_kzalloc(dev, ARRAY_SIZE(supply) *
sizeof(res->regul_bulk[0]), GFP_KERNEL);
--
1.7.9.5
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [RFC 07/12] drm: exynos: hdmi: use hdmiphy as PHY
2013-10-21 14:18 [RFC 00/12] Add DRM Exynos HDMI on SoCs from Exynos4 family Tomasz Stanislawski
` (5 preceding siblings ...)
2013-10-21 14:18 ` [RFC 06/12] Revert "drm/exynos: add mout_hdmi clock in hdmi driver to change parent" Tomasz Stanislawski
@ 2013-10-21 14:18 ` Tomasz Stanislawski
2013-10-21 14:18 ` [RFC 08/12] drm: exynos: hdmi: simplify extracting hpd-gpio from DT Tomasz Stanislawski
` (5 subsequent siblings)
12 siblings, 0 replies; 20+ messages in thread
From: Tomasz Stanislawski @ 2013-10-21 14:18 UTC (permalink / raw)
To: devicetree, linux-samsung-soc, linux-kernel
Cc: dri-devel, kyungmin.park, t.figa, kishon, sw0312.kim, inki.dae,
rahul.sharma, kgene.kim, s.nawrocki, thomas.abraham, mturquette,
Tomasz Stanislawski
The HDMIPHY (physical interface) is controlled by a single
bit in a power controller's regiter. It was implemented
as clock. It was a simple but effective hack.
This patch makes HDMI driver to control HDMIPHY via PHY interface.
Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com>
---
drivers/gpu/drm/exynos/exynos_hdmi.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c
index fcfa23a..e36588a 100644
--- a/drivers/gpu/drm/exynos/exynos_hdmi.c
+++ b/drivers/gpu/drm/exynos/exynos_hdmi.c
@@ -34,6 +34,7 @@
#include <linux/io.h>
#include <linux/of.h>
#include <linux/of_gpio.h>
+#include <linux/phy/phy.h>
#include <drm/exynos_drm.h>
@@ -82,7 +83,7 @@ struct hdmi_resources {
struct clk *sclk_hdmi;
struct clk *sclk_pixel;
struct clk *sclk_hdmiphy;
- struct clk *hdmiphy;
+ struct phy *hdmiphy;
struct regulator_bulk_data *regul_bulk;
int regul_count;
};
@@ -1685,7 +1686,7 @@ static void hdmi_poweron(struct hdmi_context *hdata)
if (regulator_bulk_enable(res->regul_count, res->regul_bulk))
DRM_DEBUG_KMS("failed to enable regulator bulk\n");
- clk_prepare_enable(res->hdmiphy);
+ phy_power_on(res->hdmiphy);
clk_prepare_enable(res->hdmi);
clk_prepare_enable(res->sclk_hdmi);
@@ -1710,7 +1711,7 @@ static void hdmi_poweroff(struct hdmi_context *hdata)
clk_disable_unprepare(res->sclk_hdmi);
clk_disable_unprepare(res->hdmi);
- clk_disable_unprepare(res->hdmiphy);
+ phy_power_off(res->hdmiphy);
regulator_bulk_disable(res->regul_count, res->regul_bulk);
mutex_lock(&hdata->hdmi_mutex);
@@ -1809,9 +1810,9 @@ static int hdmi_resources_init(struct hdmi_context *hdata)
DRM_ERROR("failed to get clock 'sclk_hdmiphy'\n");
goto fail;
}
- res->hdmiphy = devm_clk_get(dev, "hdmiphy");
+ res->hdmiphy = devm_phy_get(dev, "hdmiphy");
if (IS_ERR(res->hdmiphy)) {
- DRM_ERROR("failed to get clock 'hdmiphy'\n");
+ DRM_ERROR("failed to get phy 'hdmiphy'\n");
goto fail;
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [RFC 08/12] drm: exynos: hdmi: simplify extracting hpd-gpio from DT
2013-10-21 14:18 [RFC 00/12] Add DRM Exynos HDMI on SoCs from Exynos4 family Tomasz Stanislawski
` (6 preceding siblings ...)
2013-10-21 14:18 ` [RFC 07/12] drm: exynos: hdmi: use hdmiphy as PHY Tomasz Stanislawski
@ 2013-10-21 14:18 ` Tomasz Stanislawski
2013-10-21 14:18 ` [RFC 09/12] drm: exynos: add compatibles for HDMI and Mixer chips and exynos4210 SoC Tomasz Stanislawski
` (4 subsequent siblings)
12 siblings, 0 replies; 20+ messages in thread
From: Tomasz Stanislawski @ 2013-10-21 14:18 UTC (permalink / raw)
To: devicetree, linux-samsung-soc, linux-kernel
Cc: dri-devel, kyungmin.park, t.figa, kishon, sw0312.kim, inki.dae,
rahul.sharma, kgene.kim, s.nawrocki, thomas.abraham, mturquette,
Tomasz Stanislawski
This patch eliminates redundant checks while retrieving HPD gpio from DT during
HDMI's probe().
Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com>
---
drivers/gpu/drm/exynos/exynos_hdmi.c | 13 ++++---------
1 file changed, 4 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c
index e36588a..5adb5c1 100644
--- a/drivers/gpu/drm/exynos/exynos_hdmi.c
+++ b/drivers/gpu/drm/exynos/exynos_hdmi.c
@@ -1858,23 +1858,18 @@ static struct s5p_hdmi_platform_data *drm_hdmi_dt_parse_pdata
{
struct device_node *np = dev->of_node;
struct s5p_hdmi_platform_data *pd;
- u32 value;
pd = devm_kzalloc(dev, sizeof(*pd), GFP_KERNEL);
if (!pd)
- goto err_data;
+ return NULL;
- if (!of_find_property(np, "hpd-gpio", &value)) {
+ pd->hpd_gpio = of_get_named_gpio_flags(np, "hpd-gpio", 0, NULL);
+ if (pd->hpd_gpio < 0) {
DRM_ERROR("no hpd gpio property found\n");
- goto err_data;
+ return NULL;
}
- pd->hpd_gpio = of_get_named_gpio(np, "hpd-gpio", 0);
-
return pd;
-
-err_data:
- return NULL;
}
static struct of_device_id hdmi_match_types[] = {
--
1.7.9.5
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [RFC 09/12] drm: exynos: add compatibles for HDMI and Mixer chips and exynos4210 SoC
2013-10-21 14:18 [RFC 00/12] Add DRM Exynos HDMI on SoCs from Exynos4 family Tomasz Stanislawski
` (7 preceding siblings ...)
2013-10-21 14:18 ` [RFC 08/12] drm: exynos: hdmi: simplify extracting hpd-gpio from DT Tomasz Stanislawski
@ 2013-10-21 14:18 ` Tomasz Stanislawski
2013-10-21 14:18 ` [RFC 10/12] arm: dts: exynos4: add i2c controller for HDMIPHY Tomasz Stanislawski
` (3 subsequent siblings)
12 siblings, 0 replies; 20+ messages in thread
From: Tomasz Stanislawski @ 2013-10-21 14:18 UTC (permalink / raw)
To: devicetree, linux-samsung-soc, linux-kernel
Cc: dri-devel, kyungmin.park, t.figa, kishon, sw0312.kim, inki.dae,
rahul.sharma, kgene.kim, s.nawrocki, thomas.abraham, mturquette,
Tomasz Stanislawski
This patch add proper compatibles for Mixer and HDMI chip
available on exynos4210 SoCs.
Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com>
---
drivers/gpu/drm/exynos/exynos_hdmi.c | 3 +++
drivers/gpu/drm/exynos/exynos_mixer.c | 3 +++
2 files changed, 6 insertions(+)
diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c
index 5adb5c1..ae21fa5 100644
--- a/drivers/gpu/drm/exynos/exynos_hdmi.c
+++ b/drivers/gpu/drm/exynos/exynos_hdmi.c
@@ -1874,6 +1874,9 @@ static struct s5p_hdmi_platform_data *drm_hdmi_dt_parse_pdata
static struct of_device_id hdmi_match_types[] = {
{
+ .compatible = "samsung,exynos4210-hdmi",
+ .data = (void *)HDMI_TYPE13,
+ }, {
.compatible = "samsung,exynos5-hdmi",
.data = (void *)HDMI_TYPE14,
}, {
diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c b/drivers/gpu/drm/exynos/exynos_mixer.c
index 63bc5f9..892afb5 100644
--- a/drivers/gpu/drm/exynos/exynos_mixer.c
+++ b/drivers/gpu/drm/exynos/exynos_mixer.c
@@ -1161,6 +1161,9 @@ static struct platform_device_id mixer_driver_types[] = {
static struct of_device_id mixer_match_types[] = {
{
+ .compatible = "samsung,exynos4-mixer",
+ .data = &exynos4_mxr_drv_data,
+ }, {
.compatible = "samsung,exynos5-mixer",
.data = &exynos5250_mxr_drv_data,
}, {
--
1.7.9.5
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [RFC 10/12] arm: dts: exynos4: add i2c controller for HDMIPHY
2013-10-21 14:18 [RFC 00/12] Add DRM Exynos HDMI on SoCs from Exynos4 family Tomasz Stanislawski
` (8 preceding siblings ...)
2013-10-21 14:18 ` [RFC 09/12] drm: exynos: add compatibles for HDMI and Mixer chips and exynos4210 SoC Tomasz Stanislawski
@ 2013-10-21 14:18 ` Tomasz Stanislawski
2013-10-21 14:18 ` [RFC 11/12] arm: dts: exynos4: add HDMI devices Tomasz Stanislawski
` (2 subsequent siblings)
12 siblings, 0 replies; 20+ messages in thread
From: Tomasz Stanislawski @ 2013-10-21 14:18 UTC (permalink / raw)
To: devicetree, linux-samsung-soc, linux-kernel
Cc: dri-devel, kyungmin.park, t.figa, kishon, sw0312.kim, inki.dae,
rahul.sharma, kgene.kim, s.nawrocki, thomas.abraham, mturquette,
Tomasz Stanislawski
This patch adds DT nodes for I2C controller dedicated for HDMIPHY.
Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com>
---
arch/arm/boot/dts/exynos4.dtsi | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
index caadc02..a5f6b8b 100644
--- a/arch/arm/boot/dts/exynos4.dtsi
+++ b/arch/arm/boot/dts/exynos4.dtsi
@@ -36,6 +36,7 @@
i2c5 = &i2c_5;
i2c6 = &i2c_6;
i2c7 = &i2c_7;
+ i2c8 = &i2c_8;
csis0 = &csis_0;
csis1 = &csis_1;
fimc0 = &fimc_0;
@@ -399,6 +400,21 @@
status = "disabled";
};
+ i2c_8: i2c@138E0000 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "samsung,s3c2440-hdmiphy-i2c";
+ reg = <0x138E0000 0x100>;
+ interrupts = <0 93 0>;
+ clocks = <&clock 325>;
+ clock-names = "i2c";
+
+ hdmiphy@38 {
+ compatible = "samsung,exynos5-hdmiphy";
+ reg = <0x38>;
+ };
+ };
+
spi_0: spi@13920000 {
compatible = "samsung,exynos4210-spi";
reg = <0x13920000 0x100>;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [RFC 11/12] arm: dts: exynos4: add HDMI devices
2013-10-21 14:18 [RFC 00/12] Add DRM Exynos HDMI on SoCs from Exynos4 family Tomasz Stanislawski
` (9 preceding siblings ...)
2013-10-21 14:18 ` [RFC 10/12] arm: dts: exynos4: add i2c controller for HDMIPHY Tomasz Stanislawski
@ 2013-10-21 14:18 ` Tomasz Stanislawski
2013-10-21 14:18 ` [RFC 12/12] arm: dts: universal_c210: " Tomasz Stanislawski
2013-10-28 13:42 ` [RFC 00/12] Add DRM Exynos HDMI on SoCs from Exynos4 family Inki Dae
12 siblings, 0 replies; 20+ messages in thread
From: Tomasz Stanislawski @ 2013-10-21 14:18 UTC (permalink / raw)
To: devicetree, linux-samsung-soc, linux-kernel
Cc: dri-devel, kyungmin.park, t.figa, kishon, sw0312.kim, inki.dae,
rahul.sharma, kgene.kim, s.nawrocki, thomas.abraham, mturquette,
Tomasz Stanislawski
This patch adds DT nodes for HDMI related devices on SoCs from Exynos4 family.
Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com>
---
arch/arm/boot/dts/exynos4.dtsi | 27 +++++++++++++++++++++++++++
arch/arm/boot/dts/exynos4210.dtsi | 4 ++++
2 files changed, 31 insertions(+)
diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
index a5f6b8b..a5df9fe 100644
--- a/arch/arm/boot/dts/exynos4.dtsi
+++ b/arch/arm/boot/dts/exynos4.dtsi
@@ -522,4 +522,31 @@
samsung,power-domain = <&pd_lcd0>;
status = "disabled";
};
+
+ hdmi_phy: hdmi-phy@10020700 {
+ compatible = "simple-phy";
+ reg = <0x10020700 0x4>;
+ mask = <1>;
+ #phy-cells = <0>;
+ };
+
+ hdmi: hdmi@12D00000 {
+ reg = <0x12D00000 0x70000>;
+ interrupts = <0 92 0>;
+ clock-names = "hdmi", "sclk_hdmi", "sclk_pixel", "sclk_hdmiphy";
+ clocks = <&clock 271>, <&clock 136>, <&clock 139>, <&clock 21>;
+ phys = <&hdmi_phy>;
+ phy-names = "hdmiphy";
+ status = "disabled";
+ samsung,power-domain = <&pd_tv>;
+ };
+
+ mixer: mixer@12C10000 {
+ compatible = "samsung,exynos4-mixer";
+ interrupts = <0 91 0>;
+ reg = <0x12C10000 0x2100>, <0x12c00000 0x300>;
+ clock-names = "mixer", "sclk_hdmi", "vp", "sclk_dac", "sclk_mixer";
+ clocks = <&clock 269>, <&clock 136>, <&clock 268>, <&clock 138>, <&clock 137>;
+ samsung,power-domain = <&pd_tv>;
+ };
};
diff --git a/arch/arm/boot/dts/exynos4210.dtsi b/arch/arm/boot/dts/exynos4210.dtsi
index 057d682..75fd845 100644
--- a/arch/arm/boot/dts/exynos4210.dtsi
+++ b/arch/arm/boot/dts/exynos4210.dtsi
@@ -155,4 +155,8 @@
samsung,lcd-wb;
};
};
+
+ hdmi: hdmi@12D00000 {
+ compatible = "samsung,exynos4210-hdmi";
+ };
};
--
1.7.9.5
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [RFC 12/12] arm: dts: universal_c210: add HDMI devices
2013-10-21 14:18 [RFC 00/12] Add DRM Exynos HDMI on SoCs from Exynos4 family Tomasz Stanislawski
` (10 preceding siblings ...)
2013-10-21 14:18 ` [RFC 11/12] arm: dts: exynos4: add HDMI devices Tomasz Stanislawski
@ 2013-10-21 14:18 ` Tomasz Stanislawski
2013-10-28 13:42 ` [RFC 00/12] Add DRM Exynos HDMI on SoCs from Exynos4 family Inki Dae
12 siblings, 0 replies; 20+ messages in thread
From: Tomasz Stanislawski @ 2013-10-21 14:18 UTC (permalink / raw)
To: devicetree, linux-samsung-soc, linux-kernel
Cc: dri-devel, kyungmin.park, t.figa, kishon, sw0312.kim, inki.dae,
rahul.sharma, kgene.kim, s.nawrocki, thomas.abraham, mturquette,
Tomasz Stanislawski
This patch adds configuration of HDMI devices on Universal C210 board.
Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com>
---
arch/arm/boot/dts/exynos4210-universal_c210.dts | 53 +++++++++++++++++++++++
1 file changed, 53 insertions(+)
diff --git a/arch/arm/boot/dts/exynos4210-universal_c210.dts b/arch/arm/boot/dts/exynos4210-universal_c210.dts
index 889cdad..2d94a02 100644
--- a/arch/arm/boot/dts/exynos4210-universal_c210.dts
+++ b/arch/arm/boot/dts/exynos4210-universal_c210.dts
@@ -349,4 +349,57 @@
compatible = "samsung,s5p6440-pwm";
status = "okay";
};
+
+ hdmi_en: voltage-regulator-hdmi-5v {
+ compatible = "regulator-fixed";
+ regulator-name = "HDMI_5V";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ gpio = <&gpe0 1 0>;
+ enable-active-high;
+ };
+
+ i2c-ddc {
+ compatible = "i2c-gpio";
+ gpios = <&gpe4 2 0 &gpe4 3 0>;
+ i2c-gpio,delay-us = <100>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ pinctrl-0 = <&i2c_ddc_bus>;
+ pinctrl-names = "default";
+ status = "okay";
+
+ hdmiddc@72 {
+ compatible = "samsung,exynos5-hdmiddc";
+ reg = <0x72>;
+ };
+ };
+
+ hdmi: hdmi@12D00000 {
+ hpd-gpio = <&gpx3 7 0>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&hdmi_hpd>;
+ hdmi-en-supply = <&hdmi_en>;
+ vdd-supply = <&ldo3_reg>;
+ vdd_osc-supply = <&ldo4_reg>;
+ vdd_pll-supply = <&ldo3_reg>;
+ status = "okay";
+ };
+};
+
+&pinctrl_1 {
+ hdmi_hpd: hdmi-hpd {
+ samsung,pins = "gpx3-7";
+ samsung,pin-pud = <0>;
+ };
+};
+
+&pinctrl_0 {
+ i2c_ddc_bus: i2c-ddc-bus {
+ samsung,pins = "gpe4-2", "gpe4-3";
+ samsung,pin-function = <2>;
+ samsung,pin-pud = <3>;
+ samsung,pin-drv = <0>;
+ };
};
--
1.7.9.5
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [RFC 00/12] Add DRM Exynos HDMI on SoCs from Exynos4 family
2013-10-21 14:18 [RFC 00/12] Add DRM Exynos HDMI on SoCs from Exynos4 family Tomasz Stanislawski
` (11 preceding siblings ...)
2013-10-21 14:18 ` [RFC 12/12] arm: dts: universal_c210: " Tomasz Stanislawski
@ 2013-10-28 13:42 ` Inki Dae
2013-10-28 16:00 ` Kukjin Kim
12 siblings, 1 reply; 20+ messages in thread
From: Inki Dae @ 2013-10-28 13:42 UTC (permalink / raw)
To: Tomasz Stanislawski
Cc: devicetree@vger.kernel.org, linux-samsung-soc@vger.kernel.org,
linux-kernel@vger.kernel.org, Kukjin Kim, mturquette,
Seung-Woo Kim, DRI mailing list, Kishon Vijay Abraham I,
Kyungmin Park, Sylwester Nawrocki, Rahul Sharma
Hi Tomasz,
I have merged the re-factoring patch set from Sean Paul. Can you
re-base your patch set at top of exynos-drm-next?
Thanks,
Inki Dae
2013/10/21 Tomasz Stanislawski <t.stanislaws@samsung.com>:
> This patchset adds support for HDMI at SoCs from Exynos4 family. The patches
> are rebased on kishon/next. Additionally, The patchset contains small fixes to
> PHY and CLK frameworks. I preferred to keep all the patches together for the
> first version of the RFC.
>
> The interesting part might be 'propagation of clk_set_parent()'. This feature
> allows to remove the usage of artificial clocks in drivers. Such a situation
> happens for Exynos HDMI and 'mout_hdmi' where the clock is not even mentioned in
> some versions of SoC's documentation. Since enabling and setting rate can be
> propagated I think that clk_set_parent() should also be propagated. This would
> simplify driver's code and make it less dependant on SoC's version.
>
> Another interesting feature refers to simple PHY driver. This driver register
> a PHY interface that operates by setting a special bit in platform register.
> This situation is very common in Exynos SoCs. The current version supports
> only one phy per node. The code might be modified to support multiple phys
> from single simple-phy provider to avoid creation of multiple nodes in DT.
>
> All comments are welcome.
>
> Regards,
> Tomasz Stanislawski
>
>
> Tomasz Stanislawski (12):
> clk: propagate parent change up one level
> clk: exynos4: export sclk_hdmiphy clock
> clk: exynos4: enable clk_set_parent() propagation for sclk_hdmi and
> sclk_mixer clocks
> phy: Add simple-phy driver
> phy: use of_phy_simple_xlate for NULL xlate function
> Revert "drm/exynos: add mout_hdmi clock in hdmi driver to change
> parent"
> drm: exynos: hdmi: use hdmiphy as PHY
> drm: exynos: hdmi: simplify extracting hpd-gpio from DT
> drm: exynos: add compatibles for HDMI and Mixer chips and exynos4210
> SoC
> arm: dts: exynos4: add i2c controller for HDMIPHY
> arm: dts: exynos4: add HDMI devices
> arm: dts: universal_c210: add HDMI devices
>
> .../devicetree/bindings/clock/exynos4-clock.txt | 1 +
> arch/arm/boot/dts/exynos4.dtsi | 43 +++++++
> arch/arm/boot/dts/exynos4210-universal_c210.dts | 53 ++++++++
> arch/arm/boot/dts/exynos4210.dtsi | 4 +
> drivers/clk/clk.c | 6 +
> drivers/clk/samsung/clk-exynos4.c | 10 +-
> drivers/gpu/drm/exynos/exynos_hdmi.c | 41 +++----
> drivers/gpu/drm/exynos/exynos_mixer.c | 3 +
> drivers/phy/Kconfig | 5 +
> drivers/phy/Makefile | 1 +
> drivers/phy/phy-core.c | 2 +-
> drivers/phy/phy-simple.c | 128 ++++++++++++++++++++
> include/linux/clk-provider.h | 1 +
> 13 files changed, 269 insertions(+), 29 deletions(-)
> create mode 100644 drivers/phy/phy-simple.c
>
> --
> 1.7.9.5
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [RFC 00/12] Add DRM Exynos HDMI on SoCs from Exynos4 family
2013-10-28 13:42 ` [RFC 00/12] Add DRM Exynos HDMI on SoCs from Exynos4 family Inki Dae
@ 2013-10-28 16:00 ` Kukjin Kim
2013-10-28 17:19 ` Inki Dae
0 siblings, 1 reply; 20+ messages in thread
From: Kukjin Kim @ 2013-10-28 16:00 UTC (permalink / raw)
To: Inki Dae
Cc: Tomasz Stanislawski, devicetree@vger.kernel.org,
linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org,
Kukjin Kim, mturquette, Seung-Woo Kim, DRI mailing list,
Kishon Vijay Abraham I, Kyungmin Park, Sylwester Nawrocki,
Rahul Sharma
On 10/28/13 06:42, Inki Dae wrote:
> Hi Tomasz,
>
> I have merged the re-factoring patch set from Sean Paul. Can you
> re-base your patch set at top of exynos-drm-next?
>
Basically, RFC is not patch for merge. So Tomasz needs to re-submit
after addressing comments from RFC.
Thanks,
Kukjin
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [RFC 00/12] Add DRM Exynos HDMI on SoCs from Exynos4 family
2013-10-28 16:00 ` Kukjin Kim
@ 2013-10-28 17:19 ` Inki Dae
0 siblings, 0 replies; 20+ messages in thread
From: Inki Dae @ 2013-10-28 17:19 UTC (permalink / raw)
To: Kukjin Kim
Cc: Tomasz Stanislawski, devicetree@vger.kernel.org,
linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org,
mturquette, Seung-Woo Kim, DRI mailing list,
Kishon Vijay Abraham I, Kyungmin Park, Sylwester Nawrocki,
Rahul Sharma
2013/10/29 Kukjin Kim <kgene.kim@samsung.com>:
> On 10/28/13 06:42, Inki Dae wrote:
>>
>> Hi Tomasz,
>>
>> I have merged the re-factoring patch set from Sean Paul. Can you
>> re-base your patch set at top of exynos-drm-next?
>>
> Basically, RFC is not patch for merge. So Tomasz needs to re-submit after
> addressing comments from RFC.
>
There must definitely be your misunderstanding. I have never merged
this RFC patch set. For review, shouldn't this RFC patch set be
rebased at top of latest exynos-drm-next? :)
Thanks,
Inki Dae
> Thanks,
> Kukjin
> --
> To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc"
> in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 20+ messages in thread