All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anson Huang <anson.huang@nxp.com>
To: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
Cc: "thierry.reding@gmail.com" <thierry.reding@gmail.com>,
	"robh+dt@kernel.org" <robh+dt@kernel.org>,
	"mark.rutland@arm.com" <mark.rutland@arm.com>,
	"shawnguo@kernel.org" <shawnguo@kernel.org>,
	"s.hauer@pengutronix.de" <s.hauer@pengutronix.de>,
	"kernel@pengutronix.de" <kernel@pengutronix.de>,
	"festevam@gmail.com" <festevam@gmail.com>,
	"linux@armlinux.org.uk" <linux@armlinux.org.uk>,
	"stefan@agner.ch" <stefan@agner.ch>,
	"otavio@ossystems.com.br" <otavio@ossystems.com.br>,
	Leonard Crestez <leonard.crestez@nxp.com>,
	"schnitzeltony@gmail.com" <schnitzeltony@gmail.com>,
	"jan.tuerk@emtrion.com" <jan.tuerk@emtrion.com>,
	Robin Gong <yibin.gong@nxp.com>,
	"linux-pwm@vger.kernel.org" <linux-pwm@vger.kernel.org>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
	"linux-arm-kernel@lists.infradead.org" 
	<linux-arm-kernel@lists.infradead.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	dl-linux-imx <linux-imx@nxp.com>
Subject: RE: [PATCH V2 2/5] pwm: Add i.MX TPM PWM driver support
Date: Thu, 14 Mar 2019 14:25:32 +0000	[thread overview]
Message-ID: <DB3PR0402MB391616E8DBC8086C86B25D01F54B0@DB3PR0402MB3916.eurprd04.prod.outlook.com> (raw)
In-Reply-To: <20190314100042.fl4kdwn7awcw4aov@pengutronix.de>

Hi, Uwe

Best Regards!
Anson Huang

> -----Original Message-----
> From: Uwe Kleine-König [mailto:u.kleine-koenig@pengutronix.de]
> Sent: 2019年3月14日 18:01
> To: Anson Huang <anson.huang@nxp.com>
> Cc: thierry.reding@gmail.com; robh+dt@kernel.org; mark.rutland@arm.com;
> shawnguo@kernel.org; s.hauer@pengutronix.de; kernel@pengutronix.de;
> festevam@gmail.com; linux@armlinux.org.uk; stefan@agner.ch;
> otavio@ossystems.com.br; Leonard Crestez <leonard.crestez@nxp.com>;
> schnitzeltony@gmail.com; jan.tuerk@emtrion.com; Robin Gong
> <yibin.gong@nxp.com>; linux-pwm@vger.kernel.org;
> devicetree@vger.kernel.org; linux-arm-kernel@lists.infradead.org; linux-
> kernel@vger.kernel.org; dl-linux-imx <linux-imx@nxp.com>
> Subject: Re: [PATCH V2 2/5] pwm: Add i.MX TPM PWM driver support
> 
> Hello,
> 
> On Thu, Mar 14, 2019 at 09:49:06AM +0000, Anson Huang wrote:
> > > On Wed, Mar 13, 2019 at 07:31:16AM +0000, Anson Huang wrote:
> > > > +static void imx_tpm_pwm_config(struct pwm_chip *chip,
> > > > +			       struct pwm_device *pwm,
> > > > +			       struct pwm_state *state) {
> > > > +	struct imx_tpm_pwm_chip *tpm = to_imx_tpm_pwm_chip(chip);
> > > > +	static bool tpm_cnt_initialized;
> > > > +	unsigned int duty_cnt;
> > > > +	u32 val;
> > > > +	u64 tmp;
> > > > +
> > > > +	/*
> > > > +	 * TPM counter is shared by multi channels, let's make it to be
> > > > +	 * ONLY first channel can config TPM counter's precale and period
> > > > +	 * count.
> > > > +	 */
> > > > +	if (!tpm_cnt_initialized) {
> > > > +		imx_tpm_pwm_config_counter(chip, state->period);
> > > > +		tpm_cnt_initialized = true;
> > > > +	}
> > >
> > > So the period can only be configured once. That is not as good as it could
> be.
> > > You should allow a change whenever there is exactly one PWM in use.
> >
> > OK, maybe I can add check for other channels' statue here, and allow
> > the period update if ONLY 1 channel is enabled.
> 
> See how the SiFive patch that I already pointed out solves this same problem.

Thanks, I will add a user_count to determine how many channels are used.


> 
> > > > +	/* set duty counter */
> > > > +	tmp = readl(tpm->base + TPM_MOD) & TPM_MOD_MOD_MASK;
> > > > +	tmp *= state->duty_cycle;
> > > > +	duty_cnt = DIV_ROUND_CLOSEST_ULL(tmp, state->period);
> > >
> > > Uah, you use state->period here even though for the 2nd PWM the
> > > Divider might not be setup appropriately.
> >
> > I think that is 1 limitation here, the dts should make sure the period
> > used for different channels are same or at least they can share same
> > divider, otherwise, what if multiple channels can NOT find a divider
> > good for every channel? How to deal with this case?
> 
> You should return -ERANGE or -EINVAL for the calls that cannot be satisfied.

In my latest implementation, I have added the period setting check at the beginning
of the .apply, as the limitation states, all channels should use same period settings, so
the period here is same for all channels, once it is different, the .apply call will return failed
and the duty cycle setting will be skipped as well.

232         if (state->period != curstate.period) {
233                 /*
234                  * TPM counter is shared by multiple channels, so the prescale
235                  * and period can NOT be modified when any other channel is used.
236                  */
237                 if (tpm->user_count != 1)
238                         return -EBUSY;
239                 ret = imx_tpm_pwm_config_counter(chip, state->period);
240                 if (ret)
241                         return ret;
242         }
243
244         if (!state->enabled)
245                 duty_cycle = 0;
246
247         if (state->duty_cycle != curstate.duty_cycle ||
248             state->polarity != curstate.polarity)
249                 imx_tpm_pwm_config(chip, pwm,
250                         state->period, duty_cycle, state->polarity);




> 
> > > > [...]
> > > > +static int imx_tpm_pwm_apply(struct pwm_chip *chip, struct
> pwm_device *pwm,
> > > > +			  struct pwm_state *state)
> > > > +{
> > > > +	struct imx_tpm_pwm_chip *tpm = to_imx_tpm_pwm_chip(chip);
> > > > +	struct pwm_state curstate;
> > > > +	unsigned long flags;
> > > > +
> > > > +	imx_tpm_pwm_get_state(chip, pwm, &curstate);
> > > > +
> > > > +	spin_lock_irqsave(&tpm->lock, flags);
> > > > +
> > > > +	if (state->period != curstate.period ||
> > > > +	    state->duty_cycle != curstate.duty_cycle ||
> > > > +	    state->polarity != curstate.polarity)
> > > > +		imx_tpm_pwm_config(chip, pwm, state);
> > > > +
> > > > +	if (state->enabled != curstate.enabled)
> > > > +		imx_tpm_pwm_enable(chip, pwm, state->enabled);
> > >
> > > This is wrong. This sequence:
> > >
> > > 	pwm_apply_state(pwm, { .duty_cycle = 0, .period = 10000, .enabled =
> > > true });
> > > 	pwm_apply_state(pwm, { .duty_cycle = 10000, .period = 10000,
> > > .enabled = false });
> > >
> > > must keep the output pin low which isn't guaranteed here.
> >
> > So you mean for every .apply operation, the channel MUST be disabled
> > first, then config it, then enable it?
> 
> No. I only say that you should not configure the new period and duty cycle if
> in the end the hardware should be disabled. Always disabling is wrong, too.
>

Understand now, I will check the state->enable first, if it is false, I will set the duty_cycle
to 0 before configuring the channel.

Anson.

 
> Best regards
> Uwe
> 
> --
> Pengutronix e.K.                           | Uwe Kleine-König            |
> Industrial Linux Solutions                 |
> https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.p
> engutronix.de%2F&amp;data=02%7C01%7Canson.huang%40nxp.com%7C6f3
> 0bb40fb9d460cd73a08d6a863f4c9%7C686ea1d3bc2b4c6fa92cd99c5c301635
> %7C0%7C0%7C636881544600449875&amp;sdata=SRBTn%2BcquzRRRLrzOTG
> vlC5WNvof28J0%2B77iSxtFVYA%3D&amp;reserved=0  |

WARNING: multiple messages have this Message-ID (diff)
From: Anson Huang <anson.huang@nxp.com>
To: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
Cc: "thierry.reding@gmail.com" <thierry.reding@gmail.com>,
	"robh+dt@kernel.org" <robh+dt@kernel.org>,
	"mark.rutland@arm.com" <mark.rutland@arm.com>,
	"shawnguo@kernel.org" <shawnguo@kernel.org>,
	"s.hauer@pengutronix.de" <s.hauer@pengutronix.de>,
	"kernel@pengutronix.de" <kernel@pengutronix.de>,
	"festevam@gmail.com" <festevam@gmail.com>,
	"linux@armlinux.org.uk" <linux@armlinux.org.uk>,
	"stefan@agner.ch" <stefan@agner.ch>,
	"otavio@ossystems.com.br" <otavio@ossystems.com.br>,
	Leonard Crestez <leonard.crestez@nxp.com>,
	"schnitzeltony@gmail.com" <schnitzeltony@gmail.com>,
	"jan.tuerk@emtrion.com" <jan.tuerk@emtrion.com>,
	Robin Gong <yibin.gong@nxp.com>,
	"linux-pwm@vger.kernel.org" <linux-pwm@vger.kernel.org>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>l
Subject: RE: [PATCH V2 2/5] pwm: Add i.MX TPM PWM driver support
Date: Thu, 14 Mar 2019 14:25:32 +0000	[thread overview]
Message-ID: <DB3PR0402MB391616E8DBC8086C86B25D01F54B0@DB3PR0402MB3916.eurprd04.prod.outlook.com> (raw)
In-Reply-To: <20190314100042.fl4kdwn7awcw4aov@pengutronix.de>

Hi, Uwe

Best Regards!
Anson Huang

> -----Original Message-----
> From: Uwe Kleine-König [mailto:u.kleine-koenig@pengutronix.de]
> Sent: 2019年3月14日 18:01
> To: Anson Huang <anson.huang@nxp.com>
> Cc: thierry.reding@gmail.com; robh+dt@kernel.org; mark.rutland@arm.com;
> shawnguo@kernel.org; s.hauer@pengutronix.de; kernel@pengutronix.de;
> festevam@gmail.com; linux@armlinux.org.uk; stefan@agner.ch;
> otavio@ossystems.com.br; Leonard Crestez <leonard.crestez@nxp.com>;
> schnitzeltony@gmail.com; jan.tuerk@emtrion.com; Robin Gong
> <yibin.gong@nxp.com>; linux-pwm@vger.kernel.org;
> devicetree@vger.kernel.org; linux-arm-kernel@lists.infradead.org; linux-
> kernel@vger.kernel.org; dl-linux-imx <linux-imx@nxp.com>
> Subject: Re: [PATCH V2 2/5] pwm: Add i.MX TPM PWM driver support
> 
> Hello,
> 
> On Thu, Mar 14, 2019 at 09:49:06AM +0000, Anson Huang wrote:
> > > On Wed, Mar 13, 2019 at 07:31:16AM +0000, Anson Huang wrote:
> > > > +static void imx_tpm_pwm_config(struct pwm_chip *chip,
> > > > +			       struct pwm_device *pwm,
> > > > +			       struct pwm_state *state) {
> > > > +	struct imx_tpm_pwm_chip *tpm = to_imx_tpm_pwm_chip(chip);
> > > > +	static bool tpm_cnt_initialized;
> > > > +	unsigned int duty_cnt;
> > > > +	u32 val;
> > > > +	u64 tmp;
> > > > +
> > > > +	/*
> > > > +	 * TPM counter is shared by multi channels, let's make it to be
> > > > +	 * ONLY first channel can config TPM counter's precale and period
> > > > +	 * count.
> > > > +	 */
> > > > +	if (!tpm_cnt_initialized) {
> > > > +		imx_tpm_pwm_config_counter(chip, state->period);
> > > > +		tpm_cnt_initialized = true;
> > > > +	}
> > >
> > > So the period can only be configured once. That is not as good as it could
> be.
> > > You should allow a change whenever there is exactly one PWM in use.
> >
> > OK, maybe I can add check for other channels' statue here, and allow
> > the period update if ONLY 1 channel is enabled.
> 
> See how the SiFive patch that I already pointed out solves this same problem.

Thanks, I will add a user_count to determine how many channels are used.


> 
> > > > +	/* set duty counter */
> > > > +	tmp = readl(tpm->base + TPM_MOD) & TPM_MOD_MOD_MASK;
> > > > +	tmp *= state->duty_cycle;
> > > > +	duty_cnt = DIV_ROUND_CLOSEST_ULL(tmp, state->period);
> > >
> > > Uah, you use state->period here even though for the 2nd PWM the
> > > Divider might not be setup appropriately.
> >
> > I think that is 1 limitation here, the dts should make sure the period
> > used for different channels are same or at least they can share same
> > divider, otherwise, what if multiple channels can NOT find a divider
> > good for every channel? How to deal with this case?
> 
> You should return -ERANGE or -EINVAL for the calls that cannot be satisfied.

In my latest implementation, I have added the period setting check at the beginning
of the .apply, as the limitation states, all channels should use same period settings, so
the period here is same for all channels, once it is different, the .apply call will return failed
and the duty cycle setting will be skipped as well.

232         if (state->period != curstate.period) {
233                 /*
234                  * TPM counter is shared by multiple channels, so the prescale
235                  * and period can NOT be modified when any other channel is used.
236                  */
237                 if (tpm->user_count != 1)
238                         return -EBUSY;
239                 ret = imx_tpm_pwm_config_counter(chip, state->period);
240                 if (ret)
241                         return ret;
242         }
243
244         if (!state->enabled)
245                 duty_cycle = 0;
246
247         if (state->duty_cycle != curstate.duty_cycle ||
248             state->polarity != curstate.polarity)
249                 imx_tpm_pwm_config(chip, pwm,
250                         state->period, duty_cycle, state->polarity);




> 
> > > > [...]
> > > > +static int imx_tpm_pwm_apply(struct pwm_chip *chip, struct
> pwm_device *pwm,
> > > > +			  struct pwm_state *state)
> > > > +{
> > > > +	struct imx_tpm_pwm_chip *tpm = to_imx_tpm_pwm_chip(chip);
> > > > +	struct pwm_state curstate;
> > > > +	unsigned long flags;
> > > > +
> > > > +	imx_tpm_pwm_get_state(chip, pwm, &curstate);
> > > > +
> > > > +	spin_lock_irqsave(&tpm->lock, flags);
> > > > +
> > > > +	if (state->period != curstate.period ||
> > > > +	    state->duty_cycle != curstate.duty_cycle ||
> > > > +	    state->polarity != curstate.polarity)
> > > > +		imx_tpm_pwm_config(chip, pwm, state);
> > > > +
> > > > +	if (state->enabled != curstate.enabled)
> > > > +		imx_tpm_pwm_enable(chip, pwm, state->enabled);
> > >
> > > This is wrong. This sequence:
> > >
> > > 	pwm_apply_state(pwm, { .duty_cycle = 0, .period = 10000, .enabled =
> > > true });
> > > 	pwm_apply_state(pwm, { .duty_cycle = 10000, .period = 10000,
> > > .enabled = false });
> > >
> > > must keep the output pin low which isn't guaranteed here.
> >
> > So you mean for every .apply operation, the channel MUST be disabled
> > first, then config it, then enable it?
> 
> No. I only say that you should not configure the new period and duty cycle if
> in the end the hardware should be disabled. Always disabling is wrong, too.
>

Understand now, I will check the state->enable first, if it is false, I will set the duty_cycle
to 0 before configuring the channel.

Anson.

 
> Best regards
> Uwe
> 
> --
> Pengutronix e.K.                           | Uwe Kleine-König            |
> Industrial Linux Solutions                 |
> https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.p
> engutronix.de%2F&amp;data=02%7C01%7Canson.huang%40nxp.com%7C6f3
> 0bb40fb9d460cd73a08d6a863f4c9%7C686ea1d3bc2b4c6fa92cd99c5c301635
> %7C0%7C0%7C636881544600449875&amp;sdata=SRBTn%2BcquzRRRLrzOTG
> vlC5WNvof28J0%2B77iSxtFVYA%3D&amp;reserved=0  |

WARNING: multiple messages have this Message-ID (diff)
From: Anson Huang <anson.huang@nxp.com>
To: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
Cc: "mark.rutland@arm.com" <mark.rutland@arm.com>,
	"linux-pwm@vger.kernel.org" <linux-pwm@vger.kernel.org>,
	Robin Gong <yibin.gong@nxp.com>,
	"schnitzeltony@gmail.com" <schnitzeltony@gmail.com>,
	"otavio@ossystems.com.br" <otavio@ossystems.com.br>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
	"festevam@gmail.com" <festevam@gmail.com>,
	"s.hauer@pengutronix.de" <s.hauer@pengutronix.de>,
	"jan.tuerk@emtrion.com" <jan.tuerk@emtrion.com>,
	"linux@armlinux.org.uk" <linux@armlinux.org.uk>,
	"robh+dt@kernel.org" <robh+dt@kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"thierry.reding@gmail.com" <thierry.reding@gmail.com>,
	"stefan@agner.ch" <stefan@agner.ch>,
	"kernel@pengutronix.de" <kernel@pengutronix.de>,
	Leonard Crestez <leonard.crestez@nxp.com>,
	"shawnguo@kernel.org" <shawnguo@kernel.org>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>,
	dl-linux-imx <linux-imx@nxp.com>
Subject: RE: [PATCH V2 2/5] pwm: Add i.MX TPM PWM driver support
Date: Thu, 14 Mar 2019 14:25:32 +0000	[thread overview]
Message-ID: <DB3PR0402MB391616E8DBC8086C86B25D01F54B0@DB3PR0402MB3916.eurprd04.prod.outlook.com> (raw)
In-Reply-To: <20190314100042.fl4kdwn7awcw4aov@pengutronix.de>

Hi, Uwe

Best Regards!
Anson Huang

> -----Original Message-----
> From: Uwe Kleine-König [mailto:u.kleine-koenig@pengutronix.de]
> Sent: 2019年3月14日 18:01
> To: Anson Huang <anson.huang@nxp.com>
> Cc: thierry.reding@gmail.com; robh+dt@kernel.org; mark.rutland@arm.com;
> shawnguo@kernel.org; s.hauer@pengutronix.de; kernel@pengutronix.de;
> festevam@gmail.com; linux@armlinux.org.uk; stefan@agner.ch;
> otavio@ossystems.com.br; Leonard Crestez <leonard.crestez@nxp.com>;
> schnitzeltony@gmail.com; jan.tuerk@emtrion.com; Robin Gong
> <yibin.gong@nxp.com>; linux-pwm@vger.kernel.org;
> devicetree@vger.kernel.org; linux-arm-kernel@lists.infradead.org; linux-
> kernel@vger.kernel.org; dl-linux-imx <linux-imx@nxp.com>
> Subject: Re: [PATCH V2 2/5] pwm: Add i.MX TPM PWM driver support
> 
> Hello,
> 
> On Thu, Mar 14, 2019 at 09:49:06AM +0000, Anson Huang wrote:
> > > On Wed, Mar 13, 2019 at 07:31:16AM +0000, Anson Huang wrote:
> > > > +static void imx_tpm_pwm_config(struct pwm_chip *chip,
> > > > +			       struct pwm_device *pwm,
> > > > +			       struct pwm_state *state) {
> > > > +	struct imx_tpm_pwm_chip *tpm = to_imx_tpm_pwm_chip(chip);
> > > > +	static bool tpm_cnt_initialized;
> > > > +	unsigned int duty_cnt;
> > > > +	u32 val;
> > > > +	u64 tmp;
> > > > +
> > > > +	/*
> > > > +	 * TPM counter is shared by multi channels, let's make it to be
> > > > +	 * ONLY first channel can config TPM counter's precale and period
> > > > +	 * count.
> > > > +	 */
> > > > +	if (!tpm_cnt_initialized) {
> > > > +		imx_tpm_pwm_config_counter(chip, state->period);
> > > > +		tpm_cnt_initialized = true;
> > > > +	}
> > >
> > > So the period can only be configured once. That is not as good as it could
> be.
> > > You should allow a change whenever there is exactly one PWM in use.
> >
> > OK, maybe I can add check for other channels' statue here, and allow
> > the period update if ONLY 1 channel is enabled.
> 
> See how the SiFive patch that I already pointed out solves this same problem.

Thanks, I will add a user_count to determine how many channels are used.


> 
> > > > +	/* set duty counter */
> > > > +	tmp = readl(tpm->base + TPM_MOD) & TPM_MOD_MOD_MASK;
> > > > +	tmp *= state->duty_cycle;
> > > > +	duty_cnt = DIV_ROUND_CLOSEST_ULL(tmp, state->period);
> > >
> > > Uah, you use state->period here even though for the 2nd PWM the
> > > Divider might not be setup appropriately.
> >
> > I think that is 1 limitation here, the dts should make sure the period
> > used for different channels are same or at least they can share same
> > divider, otherwise, what if multiple channels can NOT find a divider
> > good for every channel? How to deal with this case?
> 
> You should return -ERANGE or -EINVAL for the calls that cannot be satisfied.

In my latest implementation, I have added the period setting check at the beginning
of the .apply, as the limitation states, all channels should use same period settings, so
the period here is same for all channels, once it is different, the .apply call will return failed
and the duty cycle setting will be skipped as well.

232         if (state->period != curstate.period) {
233                 /*
234                  * TPM counter is shared by multiple channels, so the prescale
235                  * and period can NOT be modified when any other channel is used.
236                  */
237                 if (tpm->user_count != 1)
238                         return -EBUSY;
239                 ret = imx_tpm_pwm_config_counter(chip, state->period);
240                 if (ret)
241                         return ret;
242         }
243
244         if (!state->enabled)
245                 duty_cycle = 0;
246
247         if (state->duty_cycle != curstate.duty_cycle ||
248             state->polarity != curstate.polarity)
249                 imx_tpm_pwm_config(chip, pwm,
250                         state->period, duty_cycle, state->polarity);




> 
> > > > [...]
> > > > +static int imx_tpm_pwm_apply(struct pwm_chip *chip, struct
> pwm_device *pwm,
> > > > +			  struct pwm_state *state)
> > > > +{
> > > > +	struct imx_tpm_pwm_chip *tpm = to_imx_tpm_pwm_chip(chip);
> > > > +	struct pwm_state curstate;
> > > > +	unsigned long flags;
> > > > +
> > > > +	imx_tpm_pwm_get_state(chip, pwm, &curstate);
> > > > +
> > > > +	spin_lock_irqsave(&tpm->lock, flags);
> > > > +
> > > > +	if (state->period != curstate.period ||
> > > > +	    state->duty_cycle != curstate.duty_cycle ||
> > > > +	    state->polarity != curstate.polarity)
> > > > +		imx_tpm_pwm_config(chip, pwm, state);
> > > > +
> > > > +	if (state->enabled != curstate.enabled)
> > > > +		imx_tpm_pwm_enable(chip, pwm, state->enabled);
> > >
> > > This is wrong. This sequence:
> > >
> > > 	pwm_apply_state(pwm, { .duty_cycle = 0, .period = 10000, .enabled =
> > > true });
> > > 	pwm_apply_state(pwm, { .duty_cycle = 10000, .period = 10000,
> > > .enabled = false });
> > >
> > > must keep the output pin low which isn't guaranteed here.
> >
> > So you mean for every .apply operation, the channel MUST be disabled
> > first, then config it, then enable it?
> 
> No. I only say that you should not configure the new period and duty cycle if
> in the end the hardware should be disabled. Always disabling is wrong, too.
>

Understand now, I will check the state->enable first, if it is false, I will set the duty_cycle
to 0 before configuring the channel.

Anson.

 
> Best regards
> Uwe
> 
> --
> Pengutronix e.K.                           | Uwe Kleine-König            |
> Industrial Linux Solutions                 |
> https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.p
> engutronix.de%2F&amp;data=02%7C01%7Canson.huang%40nxp.com%7C6f3
> 0bb40fb9d460cd73a08d6a863f4c9%7C686ea1d3bc2b4c6fa92cd99c5c301635
> %7C0%7C0%7C636881544600449875&amp;sdata=SRBTn%2BcquzRRRLrzOTG
> vlC5WNvof28J0%2B77iSxtFVYA%3D&amp;reserved=0  |
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2019-03-14 14:25 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-13  7:31 [PATCH V2 0/5] Add i.MX7ULP EVK PWM backlight support Anson Huang
2019-03-13  7:31 ` Anson Huang
2019-03-13  7:31 ` Anson Huang
2019-03-13  7:31 ` [PATCH V2 1/5] dt-bindings: pwm: Add i.MX TPM PWM binding Anson Huang
2019-03-13  7:31   ` Anson Huang
2019-03-13  7:31   ` Anson Huang
2019-03-13  7:31 ` [PATCH V2 2/5] pwm: Add i.MX TPM PWM driver support Anson Huang
2019-03-13  7:31   ` Anson Huang
2019-03-13  7:31   ` Anson Huang
2019-03-14  9:17   ` Uwe Kleine-König
2019-03-14  9:17     ` Uwe Kleine-König
2019-03-14  9:17     ` Uwe Kleine-König
2019-03-14  9:19     ` Uwe Kleine-König
2019-03-14  9:19       ` Uwe Kleine-König
2019-03-14  9:19       ` Uwe Kleine-König
2019-03-14  9:49     ` Anson Huang
2019-03-14  9:49       ` Anson Huang
2019-03-14  9:49       ` Anson Huang
2019-03-14 10:00       ` Uwe Kleine-König
2019-03-14 10:00         ` Uwe Kleine-König
2019-03-14 10:00         ` Uwe Kleine-König
2019-03-14 14:25         ` Anson Huang [this message]
2019-03-14 14:25           ` Anson Huang
2019-03-14 14:25           ` Anson Huang
2019-03-14 14:42     ` Anson Huang
2019-03-14 14:42       ` Anson Huang
2019-03-14 14:42       ` Anson Huang
2019-03-13  7:31 ` [PATCH V2 3/5] ARM: imx_v6_v7_defconfig: Add TPM PWM support by default Anson Huang
2019-03-13  7:31   ` Anson Huang
2019-03-13  7:31   ` Anson Huang
2019-03-13  7:31 ` [PATCH V2 4/5] ARM: dts: imx7ulp: Add pwm0 support Anson Huang
2019-03-13  7:31   ` Anson Huang
2019-03-13  7:31   ` Anson Huang
2019-03-13  7:31 ` [PATCH V2 5/5] ARM: dts: imx7ulp-evk: Add backlight support Anson Huang
2019-03-13  7:31   ` Anson Huang
2019-03-13  7:31   ` Anson Huang

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=DB3PR0402MB391616E8DBC8086C86B25D01F54B0@DB3PR0402MB3916.eurprd04.prod.outlook.com \
    --to=anson.huang@nxp.com \
    --cc=devicetree@vger.kernel.org \
    --cc=festevam@gmail.com \
    --cc=jan.tuerk@emtrion.com \
    --cc=kernel@pengutronix.de \
    --cc=leonard.crestez@nxp.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-imx@nxp.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pwm@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=mark.rutland@arm.com \
    --cc=otavio@ossystems.com.br \
    --cc=robh+dt@kernel.org \
    --cc=s.hauer@pengutronix.de \
    --cc=schnitzeltony@gmail.com \
    --cc=shawnguo@kernel.org \
    --cc=stefan@agner.ch \
    --cc=thierry.reding@gmail.com \
    --cc=u.kleine-koenig@pengutronix.de \
    --cc=yibin.gong@nxp.com \
    /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.