From: Tomasz Figa <tomasz.figa@gmail.com>
To: linux-arm-kernel@lists.infradead.org
Subject: Re: [RFC PATCH 3/5] video: exynos_dsi: Use generic PHY driver
Date: Sun, 16 Jun 2013 21:15:37 +0000 [thread overview]
Message-ID: <1502179.yCdHZgQgqV@flatron> (raw)
In-Reply-To: <1371231951-1969-4-git-send-email-s.nawrocki@samsung.com>
On Friday 14 of June 2013 19:45:49 Sylwester Nawrocki wrote:
> Use the generic PHY API instead of the platform callback to control
> the MIPI DSIM DPHY.
>
> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
> ---
> drivers/video/display/source-exynos_dsi.c | 36
> +++++++++-------------------- include/video/exynos_dsi.h
> | 5 ----
> 2 files changed, 11 insertions(+), 30 deletions(-)
Yes, this is what I was really missing a lot while developing this driver.
Definitely looks good! It's a shame we don't have this driver in mainline
yet ;) ,
Best regards,
Tomasz
> diff --git a/drivers/video/display/source-exynos_dsi.c
> b/drivers/video/display/source-exynos_dsi.c index 145d57b..dfab790
> 100644
> --- a/drivers/video/display/source-exynos_dsi.c
> +++ b/drivers/video/display/source-exynos_dsi.c
> @@ -24,6 +24,7 @@
> #include <linux/mm.h>
> #include <linux/module.h>
> #include <linux/of.h>
> +#include <linux/phy/phy.h>
> #include <linux/platform_device.h>
> #include <linux/pm_runtime.h>
> #include <linux/regulator/consumer.h>
> @@ -219,6 +220,7 @@ struct exynos_dsi {
> bool enabled;
>
> struct platform_device *pdev;
> + struct phy *phy;
> struct device *dev;
> struct resource *res;
> struct clk *pll_clk;
> @@ -816,6 +818,7 @@ again:
>
> static bool exynos_dsi_transfer_finish(struct exynos_dsi *dsi)
> {
> + static unsigned long j;
> struct exynos_dsi_transfer *xfer;
> unsigned long flags;
> bool start = true;
> @@ -824,7 +827,8 @@ static bool exynos_dsi_transfer_finish(struct
> exynos_dsi *dsi)
>
> if (list_empty(&dsi->transfer_list)) {
> spin_unlock_irqrestore(&dsi->transfer_lock, flags);
> - dev_warn(dsi->dev, "unexpected TX/RX interrupt\n");
> + if (printk_timed_ratelimit(&j, 500))
> + dev_warn(dsi->dev, "unexpected TX/RX
interrupt\n");
> return false;
> }
>
> @@ -994,8 +998,7 @@ static int exynos_dsi_enable(struct video_source
> *src) clk_prepare_enable(dsi->bus_clk);
> clk_prepare_enable(dsi->pll_clk);
>
> - if (dsi->pd->phy_enable)
> - dsi->pd->phy_enable(dsi->pdev, true);
> + phy_power_on(dsi->phy);
>
> exynos_dsi_reset(dsi);
> exynos_dsi_init_link(dsi);
> @@ -1019,8 +1022,7 @@ static int exynos_dsi_disable(struct video_source
> *src)
>
> exynos_dsi_disable_clock(dsi);
>
> - if (dsi->pd->phy_enable)
> - dsi->pd->phy_enable(dsi->pdev, false);
> + phy_power_off(dsi->phy);
>
> clk_disable_unprepare(dsi->pll_clk);
> clk_disable_unprepare(dsi->bus_clk);
> @@ -1099,12 +1101,6 @@ static const struct dsi_video_source_ops
> exynos_dsi_ops = { * Device Tree
> */
>
> -static int (* const of_phy_enables[])(struct platform_device *, bool) > { -#ifdef CONFIG_S5P_SETUP_MIPIPHY
> - [0] = s5p_dsim_phy_enable,
> -#endif
> -};
> -
> static struct exynos_dsi_platform_data *exynos_dsi_parse_dt(
> struct platform_device
*pdev)
> {
> @@ -1112,7 +1108,6 @@ static struct exynos_dsi_platform_data
> *exynos_dsi_parse_dt( struct exynos_dsi_platform_data *dsi_pd;
> struct device *dev = &pdev->dev;
> const __be32 *prop_data;
> - u32 val;
>
> dsi_pd = kzalloc(sizeof(*dsi_pd), GFP_KERNEL);
> if (!dsi_pd) {
> @@ -1120,19 +1115,6 @@ static struct exynos_dsi_platform_data
> *exynos_dsi_parse_dt( return NULL;
> }
>
> - prop_data = of_get_property(node, "samsung,phy-type", NULL);
> - if (!prop_data) {
> - dev_err(dev, "failed to get phy-type property\n");
> - goto err_free_pd;
> - }
> -
> - val = be32_to_cpu(*prop_data);
> - if (val >= ARRAY_SIZE(of_phy_enables) || !of_phy_enables[val]) {
> - dev_err(dev, "Invalid phy-type %u\n", val);
> - goto err_free_pd;
> - }
> - dsi_pd->phy_enable = of_phy_enables[val];
> -
> prop_data = of_get_property(node, "samsung,pll-stable-time",
NULL);
> if (!prop_data) {
> dev_err(dev, "failed to get pll-stable-time property\n");
> @@ -1254,6 +1236,10 @@ static int exynos_dsi_probe(struct
> platform_device *pdev) return -ENOMEM;
> }
>
> + dsi->phy = devm_phy_get(&pdev->dev, "dsim");
> + if (IS_ERR(dsi->phy))
> + return PTR_ERR(dsi->phy);
> +
> platform_set_drvdata(pdev, dsi);
>
> dsi->irq = platform_get_irq(pdev, 0);
> diff --git a/include/video/exynos_dsi.h b/include/video/exynos_dsi.h
> index 95e1568..5c062c7 100644
> --- a/include/video/exynos_dsi.h
> +++ b/include/video/exynos_dsi.h
> @@ -25,9 +25,6 @@
> */
> struct exynos_dsi_platform_data {
> unsigned int enabled;
> -
> - int (*phy_enable)(struct platform_device *pdev, bool on);
> -
> unsigned int pll_stable_time;
> unsigned long pll_clk_rate;
> unsigned long esc_clk_rate;
> @@ -36,6 +33,4 @@ struct exynos_dsi_platform_data {
> unsigned short rx_timeout;
> };
>
> -int s5p_dsim_phy_enable(struct platform_device *pdev, bool on);
> -
> #endif /* _EXYNOS_MIPI_DSIM_H */
WARNING: multiple messages have this Message-ID (diff)
From: Tomasz Figa <tomasz.figa@gmail.com>
To: Sylwester Nawrocki <s.nawrocki@samsung.com>
Cc: kishon@ti.com, linux-arm-kernel@lists.infradead.org,
linux-media@vger.kernel.org, linux-samsung-soc@vger.kernel.org,
kyungmin.park@samsung.com, sw0312.kim@samsung.com,
devicetree-discuss@lists.ozlabs.org, kgene.kim@samsung.com,
dh09.lee@samsung.com, jg1.han@samsung.com,
linux-fbdev@vger.kernel.org
Subject: Re: [RFC PATCH 3/5] video: exynos_dsi: Use generic PHY driver
Date: Sun, 16 Jun 2013 23:15:37 +0200 [thread overview]
Message-ID: <1502179.yCdHZgQgqV@flatron> (raw)
In-Reply-To: <1371231951-1969-4-git-send-email-s.nawrocki@samsung.com>
On Friday 14 of June 2013 19:45:49 Sylwester Nawrocki wrote:
> Use the generic PHY API instead of the platform callback to control
> the MIPI DSIM DPHY.
>
> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
> ---
> drivers/video/display/source-exynos_dsi.c | 36
> +++++++++-------------------- include/video/exynos_dsi.h
> | 5 ----
> 2 files changed, 11 insertions(+), 30 deletions(-)
Yes, this is what I was really missing a lot while developing this driver.
Definitely looks good! It's a shame we don't have this driver in mainline
yet ;) ,
Best regards,
Tomasz
> diff --git a/drivers/video/display/source-exynos_dsi.c
> b/drivers/video/display/source-exynos_dsi.c index 145d57b..dfab790
> 100644
> --- a/drivers/video/display/source-exynos_dsi.c
> +++ b/drivers/video/display/source-exynos_dsi.c
> @@ -24,6 +24,7 @@
> #include <linux/mm.h>
> #include <linux/module.h>
> #include <linux/of.h>
> +#include <linux/phy/phy.h>
> #include <linux/platform_device.h>
> #include <linux/pm_runtime.h>
> #include <linux/regulator/consumer.h>
> @@ -219,6 +220,7 @@ struct exynos_dsi {
> bool enabled;
>
> struct platform_device *pdev;
> + struct phy *phy;
> struct device *dev;
> struct resource *res;
> struct clk *pll_clk;
> @@ -816,6 +818,7 @@ again:
>
> static bool exynos_dsi_transfer_finish(struct exynos_dsi *dsi)
> {
> + static unsigned long j;
> struct exynos_dsi_transfer *xfer;
> unsigned long flags;
> bool start = true;
> @@ -824,7 +827,8 @@ static bool exynos_dsi_transfer_finish(struct
> exynos_dsi *dsi)
>
> if (list_empty(&dsi->transfer_list)) {
> spin_unlock_irqrestore(&dsi->transfer_lock, flags);
> - dev_warn(dsi->dev, "unexpected TX/RX interrupt\n");
> + if (printk_timed_ratelimit(&j, 500))
> + dev_warn(dsi->dev, "unexpected TX/RX
interrupt\n");
> return false;
> }
>
> @@ -994,8 +998,7 @@ static int exynos_dsi_enable(struct video_source
> *src) clk_prepare_enable(dsi->bus_clk);
> clk_prepare_enable(dsi->pll_clk);
>
> - if (dsi->pd->phy_enable)
> - dsi->pd->phy_enable(dsi->pdev, true);
> + phy_power_on(dsi->phy);
>
> exynos_dsi_reset(dsi);
> exynos_dsi_init_link(dsi);
> @@ -1019,8 +1022,7 @@ static int exynos_dsi_disable(struct video_source
> *src)
>
> exynos_dsi_disable_clock(dsi);
>
> - if (dsi->pd->phy_enable)
> - dsi->pd->phy_enable(dsi->pdev, false);
> + phy_power_off(dsi->phy);
>
> clk_disable_unprepare(dsi->pll_clk);
> clk_disable_unprepare(dsi->bus_clk);
> @@ -1099,12 +1101,6 @@ static const struct dsi_video_source_ops
> exynos_dsi_ops = { * Device Tree
> */
>
> -static int (* const of_phy_enables[])(struct platform_device *, bool) =
> { -#ifdef CONFIG_S5P_SETUP_MIPIPHY
> - [0] = s5p_dsim_phy_enable,
> -#endif
> -};
> -
> static struct exynos_dsi_platform_data *exynos_dsi_parse_dt(
> struct platform_device
*pdev)
> {
> @@ -1112,7 +1108,6 @@ static struct exynos_dsi_platform_data
> *exynos_dsi_parse_dt( struct exynos_dsi_platform_data *dsi_pd;
> struct device *dev = &pdev->dev;
> const __be32 *prop_data;
> - u32 val;
>
> dsi_pd = kzalloc(sizeof(*dsi_pd), GFP_KERNEL);
> if (!dsi_pd) {
> @@ -1120,19 +1115,6 @@ static struct exynos_dsi_platform_data
> *exynos_dsi_parse_dt( return NULL;
> }
>
> - prop_data = of_get_property(node, "samsung,phy-type", NULL);
> - if (!prop_data) {
> - dev_err(dev, "failed to get phy-type property\n");
> - goto err_free_pd;
> - }
> -
> - val = be32_to_cpu(*prop_data);
> - if (val >= ARRAY_SIZE(of_phy_enables) || !of_phy_enables[val]) {
> - dev_err(dev, "Invalid phy-type %u\n", val);
> - goto err_free_pd;
> - }
> - dsi_pd->phy_enable = of_phy_enables[val];
> -
> prop_data = of_get_property(node, "samsung,pll-stable-time",
NULL);
> if (!prop_data) {
> dev_err(dev, "failed to get pll-stable-time property\n");
> @@ -1254,6 +1236,10 @@ static int exynos_dsi_probe(struct
> platform_device *pdev) return -ENOMEM;
> }
>
> + dsi->phy = devm_phy_get(&pdev->dev, "dsim");
> + if (IS_ERR(dsi->phy))
> + return PTR_ERR(dsi->phy);
> +
> platform_set_drvdata(pdev, dsi);
>
> dsi->irq = platform_get_irq(pdev, 0);
> diff --git a/include/video/exynos_dsi.h b/include/video/exynos_dsi.h
> index 95e1568..5c062c7 100644
> --- a/include/video/exynos_dsi.h
> +++ b/include/video/exynos_dsi.h
> @@ -25,9 +25,6 @@
> */
> struct exynos_dsi_platform_data {
> unsigned int enabled;
> -
> - int (*phy_enable)(struct platform_device *pdev, bool on);
> -
> unsigned int pll_stable_time;
> unsigned long pll_clk_rate;
> unsigned long esc_clk_rate;
> @@ -36,6 +33,4 @@ struct exynos_dsi_platform_data {
> unsigned short rx_timeout;
> };
>
> -int s5p_dsim_phy_enable(struct platform_device *pdev, bool on);
> -
> #endif /* _EXYNOS_MIPI_DSIM_H */
WARNING: multiple messages have this Message-ID (diff)
From: tomasz.figa@gmail.com (Tomasz Figa)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC PATCH 3/5] video: exynos_dsi: Use generic PHY driver
Date: Sun, 16 Jun 2013 23:15:37 +0200 [thread overview]
Message-ID: <1502179.yCdHZgQgqV@flatron> (raw)
In-Reply-To: <1371231951-1969-4-git-send-email-s.nawrocki@samsung.com>
On Friday 14 of June 2013 19:45:49 Sylwester Nawrocki wrote:
> Use the generic PHY API instead of the platform callback to control
> the MIPI DSIM DPHY.
>
> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
> ---
> drivers/video/display/source-exynos_dsi.c | 36
> +++++++++-------------------- include/video/exynos_dsi.h
> | 5 ----
> 2 files changed, 11 insertions(+), 30 deletions(-)
Yes, this is what I was really missing a lot while developing this driver.
Definitely looks good! It's a shame we don't have this driver in mainline
yet ;) ,
Best regards,
Tomasz
> diff --git a/drivers/video/display/source-exynos_dsi.c
> b/drivers/video/display/source-exynos_dsi.c index 145d57b..dfab790
> 100644
> --- a/drivers/video/display/source-exynos_dsi.c
> +++ b/drivers/video/display/source-exynos_dsi.c
> @@ -24,6 +24,7 @@
> #include <linux/mm.h>
> #include <linux/module.h>
> #include <linux/of.h>
> +#include <linux/phy/phy.h>
> #include <linux/platform_device.h>
> #include <linux/pm_runtime.h>
> #include <linux/regulator/consumer.h>
> @@ -219,6 +220,7 @@ struct exynos_dsi {
> bool enabled;
>
> struct platform_device *pdev;
> + struct phy *phy;
> struct device *dev;
> struct resource *res;
> struct clk *pll_clk;
> @@ -816,6 +818,7 @@ again:
>
> static bool exynos_dsi_transfer_finish(struct exynos_dsi *dsi)
> {
> + static unsigned long j;
> struct exynos_dsi_transfer *xfer;
> unsigned long flags;
> bool start = true;
> @@ -824,7 +827,8 @@ static bool exynos_dsi_transfer_finish(struct
> exynos_dsi *dsi)
>
> if (list_empty(&dsi->transfer_list)) {
> spin_unlock_irqrestore(&dsi->transfer_lock, flags);
> - dev_warn(dsi->dev, "unexpected TX/RX interrupt\n");
> + if (printk_timed_ratelimit(&j, 500))
> + dev_warn(dsi->dev, "unexpected TX/RX
interrupt\n");
> return false;
> }
>
> @@ -994,8 +998,7 @@ static int exynos_dsi_enable(struct video_source
> *src) clk_prepare_enable(dsi->bus_clk);
> clk_prepare_enable(dsi->pll_clk);
>
> - if (dsi->pd->phy_enable)
> - dsi->pd->phy_enable(dsi->pdev, true);
> + phy_power_on(dsi->phy);
>
> exynos_dsi_reset(dsi);
> exynos_dsi_init_link(dsi);
> @@ -1019,8 +1022,7 @@ static int exynos_dsi_disable(struct video_source
> *src)
>
> exynos_dsi_disable_clock(dsi);
>
> - if (dsi->pd->phy_enable)
> - dsi->pd->phy_enable(dsi->pdev, false);
> + phy_power_off(dsi->phy);
>
> clk_disable_unprepare(dsi->pll_clk);
> clk_disable_unprepare(dsi->bus_clk);
> @@ -1099,12 +1101,6 @@ static const struct dsi_video_source_ops
> exynos_dsi_ops = { * Device Tree
> */
>
> -static int (* const of_phy_enables[])(struct platform_device *, bool) =
> { -#ifdef CONFIG_S5P_SETUP_MIPIPHY
> - [0] = s5p_dsim_phy_enable,
> -#endif
> -};
> -
> static struct exynos_dsi_platform_data *exynos_dsi_parse_dt(
> struct platform_device
*pdev)
> {
> @@ -1112,7 +1108,6 @@ static struct exynos_dsi_platform_data
> *exynos_dsi_parse_dt( struct exynos_dsi_platform_data *dsi_pd;
> struct device *dev = &pdev->dev;
> const __be32 *prop_data;
> - u32 val;
>
> dsi_pd = kzalloc(sizeof(*dsi_pd), GFP_KERNEL);
> if (!dsi_pd) {
> @@ -1120,19 +1115,6 @@ static struct exynos_dsi_platform_data
> *exynos_dsi_parse_dt( return NULL;
> }
>
> - prop_data = of_get_property(node, "samsung,phy-type", NULL);
> - if (!prop_data) {
> - dev_err(dev, "failed to get phy-type property\n");
> - goto err_free_pd;
> - }
> -
> - val = be32_to_cpu(*prop_data);
> - if (val >= ARRAY_SIZE(of_phy_enables) || !of_phy_enables[val]) {
> - dev_err(dev, "Invalid phy-type %u\n", val);
> - goto err_free_pd;
> - }
> - dsi_pd->phy_enable = of_phy_enables[val];
> -
> prop_data = of_get_property(node, "samsung,pll-stable-time",
NULL);
> if (!prop_data) {
> dev_err(dev, "failed to get pll-stable-time property\n");
> @@ -1254,6 +1236,10 @@ static int exynos_dsi_probe(struct
> platform_device *pdev) return -ENOMEM;
> }
>
> + dsi->phy = devm_phy_get(&pdev->dev, "dsim");
> + if (IS_ERR(dsi->phy))
> + return PTR_ERR(dsi->phy);
> +
> platform_set_drvdata(pdev, dsi);
>
> dsi->irq = platform_get_irq(pdev, 0);
> diff --git a/include/video/exynos_dsi.h b/include/video/exynos_dsi.h
> index 95e1568..5c062c7 100644
> --- a/include/video/exynos_dsi.h
> +++ b/include/video/exynos_dsi.h
> @@ -25,9 +25,6 @@
> */
> struct exynos_dsi_platform_data {
> unsigned int enabled;
> -
> - int (*phy_enable)(struct platform_device *pdev, bool on);
> -
> unsigned int pll_stable_time;
> unsigned long pll_clk_rate;
> unsigned long esc_clk_rate;
> @@ -36,6 +33,4 @@ struct exynos_dsi_platform_data {
> unsigned short rx_timeout;
> };
>
> -int s5p_dsim_phy_enable(struct platform_device *pdev, bool on);
> -
> #endif /* _EXYNOS_MIPI_DSIM_H */
next prev parent reply other threads:[~2013-06-16 21:15 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-14 17:45 [RFC PATCH 0/5] Generic PHY driver for Exynos SoCs MIPI CSI-2/DSIM DPHYs Sylwester Nawrocki
2013-06-14 17:45 ` Sylwester Nawrocki
2013-06-14 17:45 ` Sylwester Nawrocki
2013-06-14 17:45 ` [RFC PATCH 1/5] phy: Add driver for Exynos MIPI CSIS/DSIM DPHYs Sylwester Nawrocki
2013-06-14 17:45 ` Sylwester Nawrocki
2013-06-14 17:45 ` Sylwester Nawrocki
2013-06-16 21:11 ` Tomasz Figa
2013-06-16 21:11 ` Tomasz Figa
2013-06-16 21:11 ` Tomasz Figa
2013-06-19 16:32 ` Sylwester Nawrocki
2013-06-19 16:32 ` Sylwester Nawrocki
2013-06-19 16:32 ` Sylwester Nawrocki
2013-06-14 17:45 ` [RFC PATCH 2/5] ARM: dts: Add MIPI PHY node to exynos4.dtsi Sylwester Nawrocki
2013-06-14 17:45 ` Sylwester Nawrocki
2013-06-14 17:45 ` Sylwester Nawrocki
2013-06-16 21:12 ` Tomasz Figa
2013-06-16 21:12 ` Tomasz Figa
2013-06-16 21:12 ` Tomasz Figa
2013-06-14 17:45 ` [RFC PATCH 3/5] video: exynos_dsi: Use generic PHY driver Sylwester Nawrocki
2013-06-14 17:45 ` Sylwester Nawrocki
2013-06-14 17:45 ` Sylwester Nawrocki
2013-06-16 21:15 ` Tomasz Figa [this message]
2013-06-16 21:15 ` Tomasz Figa
2013-06-16 21:15 ` Tomasz Figa
2013-06-19 17:10 ` Sylwester Nawrocki
2013-06-19 17:10 ` Sylwester Nawrocki
2013-06-19 17:10 ` Sylwester Nawrocki
2013-06-19 17:20 ` Tomasz Figa
2013-06-19 17:20 ` Tomasz Figa
2013-06-19 17:20 ` Tomasz Figa
2013-06-14 17:45 ` [RFC PATCH 4/5] exynos4-is: Use generic MIPI CSIS " Sylwester Nawrocki
2013-06-14 17:45 ` Sylwester Nawrocki
2013-06-14 17:45 ` Sylwester Nawrocki
2013-06-14 17:45 ` [RFC PATCH 5/5] ARM: Samsung: Remove MIPI PHY setup code Sylwester Nawrocki
2013-06-14 17:45 ` Sylwester Nawrocki
2013-06-14 17:45 ` Sylwester Nawrocki
2013-06-16 20:52 ` Kukjin Kim
2013-06-16 20:52 ` Kukjin Kim
2013-06-16 20:52 ` Kukjin Kim
2013-06-19 17:24 ` Sylwester Nawrocki
2013-06-19 17:24 ` Sylwester Nawrocki
2013-06-19 17:24 ` Sylwester Nawrocki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1502179.yCdHZgQgqV@flatron \
--to=tomasz.figa@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.