devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/4] Add the Allwinner A31/A31s PWM driver
@ 2017-02-07 17:50 lis8215-Re5JQEeQqe8AvxtiuMwx3w
  2017-02-07 17:50 ` [PATCH v2 2/4] ARM: pwm: sun4i: selectable prescaler table for support sun6i lis8215
       [not found] ` <1486489846-662-1-git-send-email-lis8215-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
  0 siblings, 2 replies; 11+ messages in thread
From: lis8215-Re5JQEeQqe8AvxtiuMwx3w @ 2017-02-07 17:50 UTC (permalink / raw)
  To: linux-sunxi-/JYPxA39Uh5TLH3MbocFFw
  Cc: thierry.reding-Re5JQEeQqe8AvxtiuMwx3w,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8,
	maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8, wens-jdAy2FN1RRM,
	linux-pwm-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA, Siarhei Volkau

From: Siarhei Volkau <lis8215-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

First of all im sorry for accidentally sent old patch,
please ignore them.

This is the second version of the sun6i PWM patchset.
 - added missing documentation changes
 - dts changes in separate patch

Thanks to Julian Calaby for tips.

--------------------------
This series of patches introduces support for Allwinner A31 PWM, which
is significantly differ from PWM founded in other Allwinner SoCs.
Patches 1/4 and 2/4 refactors existing code for easier A31 PWM integration.
Patch 3/4 adds support for A31 PWM on top of existing Allwinner PWM driver.
Patch 4/4 adds the PWM block to A31/A31s device tree.

Siarhei Volkau (4):
  ARM: pwm: sun4i: unification of register operations for support sun6i.
  ARM: pwm: sun4i: selectable prescaler table for support sun6i.
  ARM: pwm: sun6i: add support the Allwinner A31 PWM.
  ARM: dts: sun6i: Add the PWM block to the A31/A31s.

 .../devicetree/bindings/pwm/pwm-sun4i.txt          |   3 +-
 arch/arm/boot/dts/sun6i-a31.dtsi                   |   8 +
 drivers/pwm/pwm-sun4i.c                            | 193 ++++++++++++++++++---
 3 files changed, 176 insertions(+), 28 deletions(-)

-- 
2.4.11

^ permalink raw reply	[flat|nested] 11+ messages in thread
* Re: [PATCH v2 3/4] ARM: pwm: sun6i: add support the Allwinner A31 PWM.
@ 2017-02-07 18:46 Icenowy Zheng
  0 siblings, 0 replies; 11+ messages in thread
From: Icenowy Zheng @ 2017-02-07 18:46 UTC (permalink / raw)
  To: lis8215-Re5JQEeQqe8AvxtiuMwx3w
  Cc: Thierry Reding, linux-kernel, mark.rutland-5wv7dgnIgG8,
	devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	wens-jdAy2FN1RRM, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw,
	linux-pwm-u79uwXL29TY76Z2rM5mHXA,
	maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A


As the driver is named pwm-sun4i, I think here you shold use "pwm: sun4i:".

2017年2月8日 01:50于 lis8215-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org写道:
>
> From: Siarhei Volkau <lis8215-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 
>
> This patch introduce the sun6i PWM driver itself: 
> - sun6i register operations, 
> - sun6i prescaler table, 
> - DT bindings for A31 SoC, 
> - documentation update. 
>
> Signed-off-by: Siarhei Volkau <lis8215-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 
> --- 
> .../devicetree/bindings/pwm/pwm-sun4i.txt          |  3 +- 
> drivers/pwm/pwm-sun4i.c                            | 71 ++++++++++++++++++++++ 
> 2 files changed, 73 insertions(+), 1 deletion(-) 
>
> diff --git a/Documentation/devicetree/bindings/pwm/pwm-sun4i.txt b/Documentation/devicetree/bindings/pwm/pwm-sun4i.txt 
> index f1cbeef..b737934 100644 
> --- a/Documentation/devicetree/bindings/pwm/pwm-sun4i.txt 
> +++ b/Documentation/devicetree/bindings/pwm/pwm-sun4i.txt 
> @@ -1,10 +1,11 @@ 
> -Allwinner sun4i and sun7i SoC PWM controller 
> +Allwinner sun4i, sun6i and sun7i SoC PWM controller 
>
> Required properties: 
>    - compatible: should be one of: 
>      - "allwinner,sun4i-a10-pwm" 
>      - "allwinner,sun5i-a10s-pwm" 
>      - "allwinner,sun5i-a13-pwm" 
> +    - "allwinner,sun6i-a31-pwm" 
>      - "allwinner,sun7i-a20-pwm" 
>      - "allwinner,sun8i-h3-pwm" 
>    - reg: physical base address and length of the controller's registers 
> diff --git a/drivers/pwm/pwm-sun4i.c b/drivers/pwm/pwm-sun4i.c 
> index 39912fc..0c1c372 100644 
> --- a/drivers/pwm/pwm-sun4i.c 
> +++ b/drivers/pwm/pwm-sun4i.c 
> @@ -47,6 +47,12 @@ 
>
> #define BIT_CH(bit, chan) ((bit) << ((chan) * PWMCH_OFFSET)) 
>
> +#define SUN6I_PWM_RDY_BIT PWM_RDY_BASE 
> +#define SUN6I_PWM_CTL_OFFS 0x0 
> +#define SUN6I_PWM_PRD_OFFS 0x4 
> +#define SUN6I_PWM_CH_CTL(ch) (0x10 * (ch) + SUN6I_PWM_CTL_OFFS) 
> +#define SUN6I_PWM_CH_PRD(ch) (0x10 * (ch) + SUN6I_PWM_PRD_OFFS) 
> + 
> struct sun4i_pwm_chip; 
>
> static const u32 sun4i_prescaler_table[] = { 
> @@ -68,6 +74,25 @@ static const u32 sun4i_prescaler_table[] = { 
> 0, /* Actually 1 but tested separately */ 
> }; 
>
> +static const u32 sun6i_prescaler_table[] = { 
> + 1, 
> + 2, 
> + 4, 
> + 8, 
> + 16, 
> + 32, 
> + 64, 
> + 0, 
> + 0, 
> + 0, 
> + 0, 
> + 0, 
> + 0, 
> + 0, 
> + 0, 
> + 0, 
> +}; 
> + 
> struct sunxi_reg_ops { 
> int (*ctl_rdy)(struct sun4i_pwm_chip *chip, int npwm); 
> u32 (*ctl_read)(struct sun4i_pwm_chip *chip, int npwm); 
> @@ -140,6 +165,33 @@ static void sun4i_reg_prd_write(struct sun4i_pwm_chip *chip, int npwm, u32 val) 
> sun4i_pwm_writel(chip, val, PWM_CH_PRD(npwm)); 
> } 
>
> +static int sun6i_reg_ctl_rdy(struct sun4i_pwm_chip *chip, int npwm) 
> +{ 
> + u32 val = sun4i_pwm_readl(chip, SUN6I_PWM_CH_CTL(npwm)); 
> + 
> + return val & BIT(SUN6I_PWM_RDY_BIT); 
> +} 
> + 
> +static u32 sun6i_reg_ctl_read(struct sun4i_pwm_chip *chip, int npwm) 
> +{ 
> + return sun4i_pwm_readl(chip, SUN6I_PWM_CH_CTL(npwm)); 
> +} 
> + 
> +static void sun6i_reg_ctl_write(struct sun4i_pwm_chip *chip, int npwm, u32 val) 
> +{ 
> + return sun4i_pwm_writel(chip, val, SUN6I_PWM_CH_CTL(npwm)); 
> +} 
> + 
> +static u32 sun6i_reg_prd_read(struct sun4i_pwm_chip *chip, int npwm) 
> +{ 
> + return sun4i_pwm_readl(chip, SUN6I_PWM_CH_PRD(npwm)); 
> +} 
> + 
> +static void sun6i_reg_prd_write(struct sun4i_pwm_chip *chip, int npwm, u32 val) 
> +{ 
> + return sun4i_pwm_writel(chip, val, SUN6I_PWM_CH_PRD(npwm)); 
> +} 
> + 
> static int sun4i_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm, 
>     int duty_ns, int period_ns) 
> { 
> @@ -306,6 +358,14 @@ static const struct sunxi_reg_ops sun4i_reg_ops = { 
> .prd_write = sun4i_reg_prd_write, 
> }; 
>
> +static const struct sunxi_reg_ops sun6i_reg_ops = { 
> + .ctl_rdy   = sun6i_reg_ctl_rdy, 
> + .ctl_read  = sun6i_reg_ctl_read, 
> + .ctl_write = sun6i_reg_ctl_write, 
> + .prd_read  = sun6i_reg_prd_read, 
> + .prd_write = sun6i_reg_prd_write, 
> +}; 
> + 
> static const struct pwm_ops sun4i_pwm_ops = { 
> .config = sun4i_pwm_config, 
> .set_polarity = sun4i_pwm_set_polarity, 
> @@ -338,6 +398,14 @@ static const struct sun4i_pwm_data sun4i_pwm_data_a13 = { 
> .prescaler_table = sun4i_prescaler_table, 
> }; 
>
> +static const struct sun4i_pwm_data sun6i_pwm_data_a31 = { 
> + .has_prescaler_bypass = false, 
> + .has_rdy = true, 
> + .npwm = 4, 
> + .ops = &sun6i_reg_ops, 
> + .prescaler_table = sun6i_prescaler_table, 
> +}; 
> + 
> static const struct sun4i_pwm_data sun4i_pwm_data_a20 = { 
> .has_prescaler_bypass = true, 
> .has_rdy = true, 
> @@ -365,6 +433,9 @@ static const struct of_device_id sun4i_pwm_dt_ids[] = { 
> .compatible = "allwinner,sun5i-a13-pwm", 
> .data = &sun4i_pwm_data_a13, 
> }, { 
> + .compatible = "allwinner,sun6i-a31-pwm", 
> + .data = &sun6i_pwm_data_a31, 
> + }, { 
> .compatible = "allwinner,sun7i-a20-pwm", 
> .data = &sun4i_pwm_data_a20, 
> }, { 
> -- 
> 2.4.11 
>
> -- 
> You received this message because you are subscribed to the Google Groups "linux-sunxi" group. 
> To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org 
> For more options, visit https://groups.google.com/d/optout. 

-- 
You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2017-02-15 22:16 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-02-07 17:50 [PATCH v2 0/4] Add the Allwinner A31/A31s PWM driver lis8215-Re5JQEeQqe8AvxtiuMwx3w
2017-02-07 17:50 ` [PATCH v2 2/4] ARM: pwm: sun4i: selectable prescaler table for support sun6i lis8215
     [not found] ` <1486489846-662-1-git-send-email-lis8215-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-02-07 17:50   ` [PATCH v2 1/4] ARM: pwm: sun4i: unification of register operations " lis8215-Re5JQEeQqe8AvxtiuMwx3w
     [not found]     ` <1486489846-662-2-git-send-email-lis8215-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-02-08  7:52       ` Maxime Ripard
2017-02-08 16:41         ` Волков Сергей
     [not found]           ` <CAKNVLfaYoPf-b-mGc0eSmmAk0QPhMCRt5aT5Z3JBcfKhridWDA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-02-10  8:38             ` Maxime Ripard
2017-02-07 17:50   ` [PATCH v2 3/4] ARM: pwm: sun6i: add support the Allwinner A31 PWM lis8215-Re5JQEeQqe8AvxtiuMwx3w
     [not found]     ` <1486489846-662-4-git-send-email-lis8215-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-02-08  7:53       ` Maxime Ripard
2017-02-15 22:16     ` Rob Herring
2017-02-07 17:50   ` [PATCH v2 4/4] ARM: dts: sun6i: Add the PWM block to the A31/A31s lis8215-Re5JQEeQqe8AvxtiuMwx3w
  -- strict thread matches above, loose matches on Subject: below --
2017-02-07 18:46 [PATCH v2 3/4] ARM: pwm: sun6i: add support the Allwinner A31 PWM Icenowy Zheng

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).