diff options
Diffstat (limited to 'drivers/counter/stm32-timer-cnt.c')
| -rw-r--r-- | drivers/counter/stm32-timer-cnt.c | 48 | 
1 files changed, 27 insertions, 21 deletions
diff --git a/drivers/counter/stm32-timer-cnt.c b/drivers/counter/stm32-timer-cnt.c index 0546e932db0c..5779ae7c73cf 100644 --- a/drivers/counter/stm32-timer-cnt.c +++ b/drivers/counter/stm32-timer-cnt.c @@ -29,7 +29,6 @@ struct stm32_timer_regs {  };  struct stm32_timer_cnt { -	struct counter_device counter;  	struct regmap *regmap;  	struct clk *clk;  	u32 max_arr; @@ -47,7 +46,7 @@ static const enum counter_function stm32_count_functions[] = {  static int stm32_count_read(struct counter_device *counter,  			    struct counter_count *count, u64 *val)  { -	struct stm32_timer_cnt *const priv = counter->priv; +	struct stm32_timer_cnt *const priv = counter_priv(counter);  	u32 cnt;  	regmap_read(priv->regmap, TIM_CNT, &cnt); @@ -59,7 +58,7 @@ static int stm32_count_read(struct counter_device *counter,  static int stm32_count_write(struct counter_device *counter,  			     struct counter_count *count, const u64 val)  { -	struct stm32_timer_cnt *const priv = counter->priv; +	struct stm32_timer_cnt *const priv = counter_priv(counter);  	u32 ceiling;  	regmap_read(priv->regmap, TIM_ARR, &ceiling); @@ -73,7 +72,7 @@ static int stm32_count_function_read(struct counter_device *counter,  				     struct counter_count *count,  				     enum counter_function *function)  { -	struct stm32_timer_cnt *const priv = counter->priv; +	struct stm32_timer_cnt *const priv = counter_priv(counter);  	u32 smcr;  	regmap_read(priv->regmap, TIM_SMCR, &smcr); @@ -100,7 +99,7 @@ static int stm32_count_function_write(struct counter_device *counter,  				      struct counter_count *count,  				      enum counter_function function)  { -	struct stm32_timer_cnt *const priv = counter->priv; +	struct stm32_timer_cnt *const priv = counter_priv(counter);  	u32 cr1, sms;  	switch (function) { @@ -140,7 +139,7 @@ static int stm32_count_direction_read(struct counter_device *counter,  				      struct counter_count *count,  				      enum counter_count_direction *direction)  { -	struct stm32_timer_cnt *const priv = counter->priv; +	struct stm32_timer_cnt *const priv = counter_priv(counter);  	u32 cr1;  	regmap_read(priv->regmap, TIM_CR1, &cr1); @@ -153,7 +152,7 @@ static int stm32_count_direction_read(struct counter_device *counter,  static int stm32_count_ceiling_read(struct counter_device *counter,  				    struct counter_count *count, u64 *ceiling)  { -	struct stm32_timer_cnt *const priv = counter->priv; +	struct stm32_timer_cnt *const priv = counter_priv(counter);  	u32 arr;  	regmap_read(priv->regmap, TIM_ARR, &arr); @@ -166,7 +165,7 @@ static int stm32_count_ceiling_read(struct counter_device *counter,  static int stm32_count_ceiling_write(struct counter_device *counter,  				     struct counter_count *count, u64 ceiling)  { -	struct stm32_timer_cnt *const priv = counter->priv; +	struct stm32_timer_cnt *const priv = counter_priv(counter);  	if (ceiling > priv->max_arr)  		return -ERANGE; @@ -181,7 +180,7 @@ static int stm32_count_ceiling_write(struct counter_device *counter,  static int stm32_count_enable_read(struct counter_device *counter,  				   struct counter_count *count, u8 *enable)  { -	struct stm32_timer_cnt *const priv = counter->priv; +	struct stm32_timer_cnt *const priv = counter_priv(counter);  	u32 cr1;  	regmap_read(priv->regmap, TIM_CR1, &cr1); @@ -194,7 +193,7 @@ static int stm32_count_enable_read(struct counter_device *counter,  static int stm32_count_enable_write(struct counter_device *counter,  				    struct counter_count *count, u8 enable)  { -	struct stm32_timer_cnt *const priv = counter->priv; +	struct stm32_timer_cnt *const priv = counter_priv(counter);  	u32 cr1;  	if (enable) { @@ -317,31 +316,38 @@ static int stm32_timer_cnt_probe(struct platform_device *pdev)  	struct stm32_timers *ddata = dev_get_drvdata(pdev->dev.parent);  	struct device *dev = &pdev->dev;  	struct stm32_timer_cnt *priv; +	struct counter_device *counter; +	int ret;  	if (IS_ERR_OR_NULL(ddata))  		return -EINVAL; -	priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); -	if (!priv) +	counter = devm_counter_alloc(dev, sizeof(*priv)); +	if (!counter)  		return -ENOMEM; +	priv = counter_priv(counter); +  	priv->regmap = ddata->regmap;  	priv->clk = ddata->clk;  	priv->max_arr = ddata->max_arr; -	priv->counter.name = dev_name(dev); -	priv->counter.parent = dev; -	priv->counter.ops = &stm32_timer_cnt_ops; -	priv->counter.counts = &stm32_counts; -	priv->counter.num_counts = 1; -	priv->counter.signals = stm32_signals; -	priv->counter.num_signals = ARRAY_SIZE(stm32_signals); -	priv->counter.priv = priv; +	counter->name = dev_name(dev); +	counter->parent = dev; +	counter->ops = &stm32_timer_cnt_ops; +	counter->counts = &stm32_counts; +	counter->num_counts = 1; +	counter->signals = stm32_signals; +	counter->num_signals = ARRAY_SIZE(stm32_signals);  	platform_set_drvdata(pdev, priv);  	/* Register Counter device */ -	return devm_counter_register(dev, &priv->counter); +	ret = devm_counter_add(dev, counter); +	if (ret < 0) +		dev_err_probe(dev, ret, "Failed to add counter\n"); + +	return ret;  }  static int __maybe_unused stm32_timer_cnt_suspend(struct device *dev)  |