Hello, On Thu, Jul 23, 2020 at 12:16:18PM +0800, Tanwar, Rahul wrote: > On 14/7/2020 3:10 am, Uwe Kleine-König wrote: > > Hello, > > > > On Tue, Jun 30, 2020 at 03:55:32PM +0800, Rahul Tanwar wrote: > >> Intel Lightning Mountain(LGM) SoC contains a PWM fan controller. > >> This PWM controller does not have any other consumer, it is a > >> dedicated PWM controller for fan attached to the system. Add > >> driver for this PWM fan controller. > >> > >> Signed-off-by: Rahul Tanwar > >> --- > >> drivers/pwm/Kconfig | 11 ++ > >> drivers/pwm/Makefile | 1 + > >> drivers/pwm/pwm-intel-lgm.c | 266 ++++++++++++++++++++++++++++++++++++++++++++ > >> 3 files changed, 278 insertions(+) > >> create mode 100644 drivers/pwm/pwm-intel-lgm.c > > [...] > > >> + > >> +static int lgm_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, > >> + const struct pwm_state *state) > >> +{ > >> + struct lgm_pwm_chip *pc = to_lgm_pwm_chip(chip); > >> + u32 duty_cycle, val; > >> + unsigned int period; > >> + > >> + if (!state->enabled) { > >> + lgm_pwm_enable(chip, 0); > >> + return 0; > >> + } > >> + > >> + period = min_t(u64, state->period, pc->period); > >> + > >> + if (state->polarity != PWM_POLARITY_NORMAL || > >> + period < pc->period) > >> + return -EINVAL; > > This check looks wrong. If you refuse period < pc->period there isn't > > much configuration possible. > > I am kind of stuck here. I made this change of adding a check > period < pc->period based on your feedback on v2 patch. > In fact, you had specified this code in v2 review feedback > and i used the same exact code. My feedback was nonsense, sorry. Now I don't understand anymore what I thought. The check you proposed in v2 is perfectly fine. > How should we handle it when the hardware supports fixed period. > We don't want user to change period and allow just changing > duty_cycle. With that intention, i had first added a strict check > which refused configuration if period != pc->period. Period is > intended to be a read only value. > > How do you suggest we handle the fixed period hardware support? > Would you have any reference example of other drivers which also > supports fixed period? Thanks. > > [...] > >> +static int lgm_pwm_remove(struct platform_device *pdev) > >> +{ > >> + struct lgm_pwm_chip *pc = platform_get_drvdata(pdev); > >> + int ret; > >> + > >> + ret = pwmchip_remove(&pc->chip); > >> + if (ret < 0) > >> + return ret; > >> + > >> + clk_disable_unprepare(pc->clk); > >> + reset_control_assert(pc->rst); > > Please swap the two previous lines to match the error patch of .probe. > > Again, i had made this change based on your below review feedback > for v1. IMO, reverse of probe makes more sense. > > "In .probe() you first release reset and then enable the clock. It's good > style to do it the other way round in .remove()." Again my comment was nonsense, I'm sorry. I think I was irritated by the fact that reset handling happens in between the clk stuff in probe. You do there: devm_clk_get devm_reset_control_get_exclusive reset_control_deassert clk_prepare_enable and I noticed that as "in probe clk handling is done first". Looking at the other feedback I think my other comments are not BS. Best regards and sorry again, Uwe -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | https://www.pengutronix.de/ |