Message ID | 1347267577-3296-6-git-send-email-s.hauer@pengutronix.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Mon, Sep 10, 2012 at 10:59:35AM +0200, Sascha Hauer wrote: > From: Philipp Zabel <p.zabel@pengutronix.de> > > At the same time remove platform based support. No user for > this driver has made it into mainline so far, so all we break > is out of tree stuff. > > Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de> > Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> > Reviewed-by: Shawn Guo <shawn.guo@linaro.org> > Reviewed-by: Benoît Thébaudeau <benoit.thebaudeau@advansee.com> [...] I was just doing some build tests on the series and noticed that it fails with this: CC [M] drivers/pwm/pwm-imx.o /home/thierry.reding/src/kernel/linux-pwm.git/drivers/pwm/pwm-imx.c: In function 'imx_pwm_config_v2': /home/thierry.reding/src/kernel/linux-pwm.git/drivers/pwm/pwm-imx.c:140:2: error: implicit declaration of function 'cpu_is_mx25' [-Werror=implicit-function-declaration] This breaks bisection in the middle of the series. It seems to be related to this change. > diff --git a/drivers/pwm/pwm-imx.c b/drivers/pwm/pwm-imx.c > index a1e799e..b4e0ad3 100644 > --- a/drivers/pwm/pwm-imx.c > +++ b/drivers/pwm/pwm-imx.c > @@ -16,8 +16,7 @@ > #include <linux/clk.h> > #include <linux/io.h> > #include <linux/pwm.h> > -#include <mach/hardware.h> This probably needs to be postponed to the next patch, until the final reference to cpu_is_mx25() is removed. Thierry
On Wed, Sep 12, 2012 at 11:04:58AM +0200, Sascha Hauer wrote: > On Tue, Sep 11, 2012 at 04:40:43PM +0200, Thierry Reding wrote: > > On Mon, Sep 10, 2012 at 10:59:35AM +0200, Sascha Hauer wrote: > > > From: Philipp Zabel <p.zabel@pengutronix.de> > > > > > > At the same time remove platform based support. No user for > > > this driver has made it into mainline so far, so all we break > > > is out of tree stuff. > > > > > > Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de> > > > Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> > > > Reviewed-by: Shawn Guo <shawn.guo@linaro.org> > > > Reviewed-by: Benoît Thébaudeau <benoit.thebaudeau@advansee.com> > > [...] > > > > I was just doing some build tests on the series and noticed that it > > fails with this: > > > > CC [M] drivers/pwm/pwm-imx.o > > /home/thierry.reding/src/kernel/linux-pwm.git/drivers/pwm/pwm-imx.c: In function 'imx_pwm_config_v2': > > /home/thierry.reding/src/kernel/linux-pwm.git/drivers/pwm/pwm-imx.c:140:2: error: implicit declaration of function 'cpu_is_mx25' [-Werror=implicit-function-declaration] > > > > This breaks bisection in the middle of the series. It seems to be > > related to this change. > > > > > diff --git a/drivers/pwm/pwm-imx.c b/drivers/pwm/pwm-imx.c > > > index a1e799e..b4e0ad3 100644 > > > --- a/drivers/pwm/pwm-imx.c > > > +++ b/drivers/pwm/pwm-imx.c > > > @@ -16,8 +16,7 @@ > > > #include <linux/clk.h> > > > #include <linux/io.h> > > > #include <linux/pwm.h> > > > -#include <mach/hardware.h> > > > > This probably needs to be postponed to the next patch, until the final > > reference to cpu_is_mx25() is removed. > > Oops, you are right. I updated the tag accordingly, and did a full > compile test over this series, so please pull again: > > > The following changes since commit fea7a08acb13524b47711625eebea40a0ede69a0: > > Linux 3.6-rc3 (2012-08-22 13:29:06 -0700) > > are available in the git repository at: > > git://git.pengutronix.de/git/imx/linux-2.6.git tags/imx-pwm-oftree > > for you to fetch changes up to a1d38ca9e249e670aa9f608e1cc7491fb4ca45af: > > pwm: i.MX: fix clock lookup (2012-09-12 11:00:55 +0200) > > ---------------------------------------------------------------- > Cleanup i.MX PWM driver and add devicetree support > > ---------------------------------------------------------------- > Philipp Zabel (2): > pwm: i.MX: add devicetree support > pwm: i.MX: fix clock lookup > > Sascha Hauer (5): > pwm: i.MX: factor out SoC specific functions > pwm: i.MX: remove unnecessary if in pwm_[en|dis]able > pwm: i.MX: add functions to enable/disable pwm. > pwm: i.MX: Use module_platform_driver > pwm: i.MX: use per clock unconditionally > > Documentation/devicetree/bindings/pwm/imx-pwm.txt | 17 ++ > drivers/pwm/pwm-imx.c | 278 ++++++++++++++------- > 2 files changed, 199 insertions(+), 96 deletions(-) > create mode 100644 Documentation/devicetree/bindings/pwm/imx-pwm.txt Applied, thanks. On a side note, I decided to pull the branch, extract the patches and apply them to my tree with git am, so this won't show up as a proper merge. This is all still pretty new to me and I'm still in the process of finding out what works best, so I hope you don't mind. Thierry
On Tue, Sep 18, 2012 at 08:11:55AM +0200, Thierry Reding wrote: > On Wed, Sep 12, 2012 at 11:04:58AM +0200, Sascha Hauer wrote: > > > > > > The following changes since commit fea7a08acb13524b47711625eebea40a0ede69a0: > > > > Linux 3.6-rc3 (2012-08-22 13:29:06 -0700) > > > > are available in the git repository at: > > > > git://git.pengutronix.de/git/imx/linux-2.6.git tags/imx-pwm-oftree > > > > for you to fetch changes up to a1d38ca9e249e670aa9f608e1cc7491fb4ca45af: > > > > pwm: i.MX: fix clock lookup (2012-09-12 11:00:55 +0200) > > > > ---------------------------------------------------------------- > > Cleanup i.MX PWM driver and add devicetree support > > > > ---------------------------------------------------------------- > > Philipp Zabel (2): > > pwm: i.MX: add devicetree support > > pwm: i.MX: fix clock lookup > > > > Sascha Hauer (5): > > pwm: i.MX: factor out SoC specific functions > > pwm: i.MX: remove unnecessary if in pwm_[en|dis]able > > pwm: i.MX: add functions to enable/disable pwm. > > pwm: i.MX: Use module_platform_driver > > pwm: i.MX: use per clock unconditionally > > > > Documentation/devicetree/bindings/pwm/imx-pwm.txt | 17 ++ > > drivers/pwm/pwm-imx.c | 278 ++++++++++++++------- > > 2 files changed, 199 insertions(+), 96 deletions(-) > > create mode 100644 Documentation/devicetree/bindings/pwm/imx-pwm.txt > > Applied, thanks. On a side note, I decided to pull the branch, extract > the patches and apply them to my tree with git am, so this won't show up > as a proper merge. This is all still pretty new to me and I'm still in > the process of finding out what works best, so I hope you don't mind. Thanks Thierry. I don't mind at all. Sascha
diff --git a/Documentation/devicetree/bindings/pwm/imx-pwm.txt b/Documentation/devicetree/bindings/pwm/imx-pwm.txt new file mode 100644 index 0000000..9b9b185 --- /dev/null +++ b/Documentation/devicetree/bindings/pwm/imx-pwm.txt @@ -0,0 +1,17 @@ +Freescale i.MX PWM controller + +Required properties: +- compatible: should be "fsl,<soc>-pwm" +- reg: physical base address and length of the controller's registers +- #pwm-cells: should be 2. The first cell specifies the per-chip index + of the PWM to use and the second cell is the duty cycle in nanoseconds. +- interrupts: The interrupt for the pwm controller + +Example: + +pwm1: pwm@53fb4000 { + #pwm-cells = <2>; + compatible = "fsl,imx53-pwm", "fsl,imx27-pwm"; + reg = <0x53fb4000 0x4000>; + interrupts = <61>; +}; diff --git a/drivers/pwm/pwm-imx.c b/drivers/pwm/pwm-imx.c index a1e799e..b4e0ad3 100644 --- a/drivers/pwm/pwm-imx.c +++ b/drivers/pwm/pwm-imx.c @@ -16,8 +16,7 @@ #include <linux/clk.h> #include <linux/io.h> #include <linux/pwm.h> -#include <mach/hardware.h> - +#include <linux/of_device.h> /* i.MX1 and i.MX21 share the same PWM function block: */ @@ -204,12 +203,41 @@ static struct pwm_ops imx_pwm_ops = { .owner = THIS_MODULE, }; +struct imx_pwm_data { + int (*config)(struct pwm_chip *chip, + struct pwm_device *pwm, int duty_ns, int period_ns); + void (*set_enable)(struct pwm_chip *chip, bool enable); +}; + +static struct imx_pwm_data imx_pwm_data_v1 = { + .config = imx_pwm_config_v1, + .set_enable = imx_pwm_set_enable_v1, +}; + +static struct imx_pwm_data imx_pwm_data_v2 = { + .config = imx_pwm_config_v2, + .set_enable = imx_pwm_set_enable_v2, +}; + +static const struct of_device_id imx_pwm_dt_ids[] = { + { .compatible = "fsl,imx1-pwm", .data = &imx_pwm_data_v1, }, + { .compatible = "fsl,imx27-pwm", .data = &imx_pwm_data_v2, }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, imx_pwm_dt_ids); + static int __devinit imx_pwm_probe(struct platform_device *pdev) { + const struct of_device_id *of_id = + of_match_device(imx_pwm_dt_ids, &pdev->dev); + struct imx_pwm_data *data; struct imx_chip *imx; struct resource *r; int ret = 0; + if (!of_id) + return -ENODEV; + imx = devm_kzalloc(&pdev->dev, sizeof(*imx), GFP_KERNEL); if (imx == NULL) { dev_err(&pdev->dev, "failed to allocate memory\n"); @@ -236,13 +264,9 @@ static int __devinit imx_pwm_probe(struct platform_device *pdev) if (imx->mmio_base == NULL) return -EADDRNOTAVAIL; - if (cpu_is_mx1() || cpu_is_mx21()) { - imx->config = imx_pwm_config_v1; - imx->set_enable = imx_pwm_set_enable_v1; - } else { - imx->config = imx_pwm_config_v2; - imx->set_enable = imx_pwm_set_enable_v2; - } + data = of_id->data; + imx->config = data->config; + imx->set_enable = data->set_enable; ret = pwmchip_add(&imx->chip); if (ret < 0) @@ -265,7 +289,8 @@ static int __devexit imx_pwm_remove(struct platform_device *pdev) static struct platform_driver imx_pwm_driver = { .driver = { - .name = "mxc_pwm", + .name = "imx-pwm", + .of_match_table = of_match_ptr(imx_pwm_dt_ids), }, .probe = imx_pwm_probe, .remove = __devexit_p(imx_pwm_remove),