Re: [6/9] hwmon: gpio-fan: Get rid of platform data struct

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Sep 26, 2017 at 01:09:08AM +0200, Linus Walleij wrote:
> We are not passing the platform data struct into the driver from the
> outside, there is no point of having it around separately so instead
> of first populating the platform data struct and assigning the result
> into the same variables in the state container (struct gpio_fan_data)
> just assign the configuration from the device tree directly into the
> state container members.
> 
> Signed-off-by: Linus Walleij <linus.walleij@xxxxxxxxxx>

Applied to hwmon-next.

Thanks,
Guenter

> ---
>  drivers/hwmon/gpio-fan.c | 88 +++++++++++++++++-------------------------------
>  1 file changed, 30 insertions(+), 58 deletions(-)
> 
> diff --git a/drivers/hwmon/gpio-fan.c b/drivers/hwmon/gpio-fan.c
> index 55dbdb223e02..000c8d2e0987 100644
> --- a/drivers/hwmon/gpio-fan.c
> +++ b/drivers/hwmon/gpio-fan.c
> @@ -45,18 +45,6 @@ struct gpio_fan_speed {
>  	int ctrl_val;
>  };
>  
> -struct gpio_fan_platform_data {
> -	int			num_ctrl;
> -	unsigned int		*ctrl;	/* fan control GPIOs. */
> -	struct gpio_fan_alarm	*alarm;	/* fan alarm GPIO. */
> -	/*
> -	 * Speed conversion array: rpm from/to GPIO bit field.
> -	 * This array _must_ be sorted in ascending rpm order.
> -	 */
> -	int			num_speed;
> -	struct gpio_fan_speed	*speed;
> -};
> -
>  struct gpio_fan_data {
>  	struct device		*dev;
>  	struct device		*hwmon_dev;
> @@ -113,14 +101,12 @@ static ssize_t fan1_alarm_show(struct device *dev,
>  
>  static DEVICE_ATTR_RO(fan1_alarm);
>  
> -static int fan_alarm_init(struct gpio_fan_data *fan_data,
> -			  struct gpio_fan_alarm *alarm)
> +static int fan_alarm_init(struct gpio_fan_data *fan_data)
>  {
>  	int err;
>  	int alarm_irq;
>  	struct device *dev = fan_data->dev;
> -
> -	fan_data->alarm = alarm;
> +	struct gpio_fan_alarm *alarm = fan_data->alarm;
>  
>  	err = devm_gpio_request(dev, alarm->gpio, "GPIO fan alarm");
>  	if (err)
> @@ -379,12 +365,11 @@ static const struct attribute_group *gpio_fan_groups[] = {
>  	NULL
>  };
>  
> -static int fan_ctrl_init(struct gpio_fan_data *fan_data,
> -			 struct gpio_fan_platform_data *pdata)
> +static int fan_ctrl_init(struct gpio_fan_data *fan_data)
>  {
>  	struct device *dev = fan_data->dev;
> -	int num_ctrl = pdata->num_ctrl;
> -	unsigned *ctrl = pdata->ctrl;
> +	int num_ctrl = fan_data->num_ctrl;
> +	unsigned int *ctrl = fan_data->ctrl;
>  	int i, err;
>  
>  	for (i = 0; i < num_ctrl; i++) {
> @@ -399,10 +384,6 @@ static int fan_ctrl_init(struct gpio_fan_data *fan_data,
>  			return err;
>  	}
>  
> -	fan_data->num_ctrl = num_ctrl;
> -	fan_data->ctrl = ctrl;
> -	fan_data->num_speed = pdata->num_speed;
> -	fan_data->speed = pdata->speed;
>  	fan_data->pwm_enable = true; /* Enable manual fan speed control. */
>  	fan_data->speed_index = get_fan_speed_index(fan_data);
>  	if (fan_data->speed_index < 0)
> @@ -456,21 +437,19 @@ static const struct thermal_cooling_device_ops gpio_fan_cool_ops = {
>  /*
>   * Translate OpenFirmware node properties into platform_data
>   */
> -static int gpio_fan_get_of_pdata(struct device *dev,
> -			    struct gpio_fan_platform_data *pdata)
> +static int gpio_fan_get_of_data(struct gpio_fan_data *fan_data)
>  {
> -	struct device_node *node;
>  	struct gpio_fan_speed *speed;
> +	struct device *dev = fan_data->dev;
> +	struct device_node *np = dev->of_node;
>  	unsigned *ctrl;
>  	unsigned i;
>  	u32 u;
>  	struct property *prop;
>  	const __be32 *p;
>  
> -	node = dev->of_node;
> -
>  	/* Alarm GPIO if one exists */
> -	if (of_gpio_named_count(node, "alarm-gpios") > 0) {
> +	if (of_gpio_named_count(np, "alarm-gpios") > 0) {
>  		struct gpio_fan_alarm *alarm;
>  		int val;
>  		enum of_gpio_flags flags;
> @@ -480,39 +459,39 @@ static int gpio_fan_get_of_pdata(struct device *dev,
>  		if (!alarm)
>  			return -ENOMEM;
>  
> -		val = of_get_named_gpio_flags(node, "alarm-gpios", 0, &flags);
> +		val = of_get_named_gpio_flags(np, "alarm-gpios", 0, &flags);
>  		if (val < 0)
>  			return val;
>  		alarm->gpio = val;
>  		alarm->active_low = flags & OF_GPIO_ACTIVE_LOW;
>  
> -		pdata->alarm = alarm;
> +		fan_data->alarm = alarm;
>  	}
>  
>  	/* Fill GPIO pin array */
> -	pdata->num_ctrl = of_gpio_count(node);
> -	if (pdata->num_ctrl <= 0) {
> -		if (pdata->alarm)
> +	fan_data->num_ctrl = of_gpio_count(np);
> +	if (fan_data->num_ctrl <= 0) {
> +		if (fan_data->alarm)
>  			return 0;
>  		dev_err(dev, "DT properties empty / missing");
>  		return -ENODEV;
>  	}
> -	ctrl = devm_kzalloc(dev, pdata->num_ctrl * sizeof(unsigned),
> -				GFP_KERNEL);
> +	ctrl = devm_kzalloc(dev, fan_data->num_ctrl * sizeof(unsigned int),
> +			    GFP_KERNEL);
>  	if (!ctrl)
>  		return -ENOMEM;
> -	for (i = 0; i < pdata->num_ctrl; i++) {
> +	for (i = 0; i < fan_data->num_ctrl; i++) {
>  		int val;
>  
> -		val = of_get_gpio(node, i);
> +		val = of_get_gpio(np, i);
>  		if (val < 0)
>  			return val;
>  		ctrl[i] = val;
>  	}
> -	pdata->ctrl = ctrl;
> +	fan_data->ctrl = ctrl;
>  
>  	/* Get number of RPM/ctrl_val pairs in speed map */
> -	prop = of_find_property(node, "gpio-fan,speed-map", &i);
> +	prop = of_find_property(np, "gpio-fan,speed-map", &i);
>  	if (!prop) {
>  		dev_err(dev, "gpio-fan,speed-map DT property missing");
>  		return -ENODEV;
> @@ -522,7 +501,7 @@ static int gpio_fan_get_of_pdata(struct device *dev,
>  		dev_err(dev, "gpio-fan,speed-map contains zero/odd number of entries");
>  		return -ENODEV;
>  	}
> -	pdata->num_speed = i / 2;
> +	fan_data->num_speed = i / 2;
>  
>  	/*
>  	 * Populate speed map
> @@ -530,12 +509,12 @@ static int gpio_fan_get_of_pdata(struct device *dev,
>  	 * this needs splitting into pairs to create gpio_fan_speed structs
>  	 */
>  	speed = devm_kzalloc(dev,
> -			pdata->num_speed * sizeof(struct gpio_fan_speed),
> +			fan_data->num_speed * sizeof(struct gpio_fan_speed),
>  			GFP_KERNEL);
>  	if (!speed)
>  		return -ENOMEM;
>  	p = NULL;
> -	for (i = 0; i < pdata->num_speed; i++) {
> +	for (i = 0; i < fan_data->num_speed; i++) {
>  		p = of_prop_next_u32(prop, p, &u);
>  		if (!p)
>  			return -ENODEV;
> @@ -545,7 +524,7 @@ static int gpio_fan_get_of_pdata(struct device *dev,
>  			return -ENODEV;
>  		speed[i].ctrl_val = u;
>  	}
> -	pdata->speed = speed;
> +	fan_data->speed = speed;
>  
>  	return 0;
>  }
> @@ -562,20 +541,13 @@ static int gpio_fan_probe(struct platform_device *pdev)
>  	struct gpio_fan_data *fan_data;
>  	struct device *dev = &pdev->dev;
>  	struct device_node *np = dev->of_node;
> -	struct gpio_fan_platform_data *pdata;
>  
>  	fan_data = devm_kzalloc(dev, sizeof(struct gpio_fan_data),
>  				GFP_KERNEL);
>  	if (!fan_data)
>  		return -ENOMEM;
>  
> -	pdata = devm_kzalloc(dev,
> -			     sizeof(struct gpio_fan_platform_data),
> -			     GFP_KERNEL);
> -	if (!pdata)
> -		return -ENOMEM;
> -
> -	err = gpio_fan_get_of_pdata(dev, pdata);
> +	err = gpio_fan_get_of_data(fan_data);
>  	if (err)
>  		return err;
>  
> @@ -584,17 +556,17 @@ static int gpio_fan_probe(struct platform_device *pdev)
>  	mutex_init(&fan_data->lock);
>  
>  	/* Configure alarm GPIO if available. */
> -	if (pdata->alarm) {
> -		err = fan_alarm_init(fan_data, pdata->alarm);
> +	if (fan_data->alarm) {
> +		err = fan_alarm_init(fan_data);
>  		if (err)
>  			return err;
>  	}
>  
>  	/* Configure control GPIOs if available. */
> -	if (pdata->ctrl && pdata->num_ctrl > 0) {
> -		if (!pdata->speed || pdata->num_speed <= 1)
> +	if (fan_data->ctrl && fan_data->num_ctrl > 0) {
> +		if (!fan_data->speed || fan_data->num_speed <= 1)
>  			return -EINVAL;
> -		err = fan_ctrl_init(fan_data, pdata);
> +		err = fan_ctrl_init(fan_data);
>  		if (err)
>  			return err;
>  	}
--
To unsubscribe from this list: send the line "unsubscribe linux-hwmon" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [LM Sensors]     [Linux Sound]     [ALSA Users]     [ALSA Devel]     [Linux Audio Users]     [Linux Media]     [Kernel]     [Gimp]     [Yosemite News]     [Linux Media]

  Powered by Linux