summaryrefslogtreecommitdiffstats
path: root/drivers/hwmon/gpio-fan.c
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2017-09-25 19:09:08 -0400
committerGuenter Roeck <linux@roeck-us.net>2017-10-29 21:36:03 -0400
commitb5482f7e6cc5639440bfa0b9bb4a3a9732883f53 (patch)
treec6e2092a3679188358eadbb3bf110b4ac3c34a2c /drivers/hwmon/gpio-fan.c
parenta9b4c8afcd3d6c2b068e6ecf1a22ab26dd8c200e (diff)
hwmon: (gpio-fan) Get rid of platform data struct
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@linaro.org> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Diffstat (limited to 'drivers/hwmon/gpio-fan.c')
-rw-r--r--drivers/hwmon/gpio-fan.c88
1 files 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 {
45 int ctrl_val; 45 int ctrl_val;
46}; 46};
47 47
48struct gpio_fan_platform_data {
49 int num_ctrl;
50 unsigned int *ctrl; /* fan control GPIOs. */
51 struct gpio_fan_alarm *alarm; /* fan alarm GPIO. */
52 /*
53 * Speed conversion array: rpm from/to GPIO bit field.
54 * This array _must_ be sorted in ascending rpm order.
55 */
56 int num_speed;
57 struct gpio_fan_speed *speed;
58};
59
60struct gpio_fan_data { 48struct gpio_fan_data {
61 struct device *dev; 49 struct device *dev;
62 struct device *hwmon_dev; 50 struct device *hwmon_dev;
@@ -113,14 +101,12 @@ static ssize_t fan1_alarm_show(struct device *dev,
113 101
114static DEVICE_ATTR_RO(fan1_alarm); 102static DEVICE_ATTR_RO(fan1_alarm);
115 103
116static int fan_alarm_init(struct gpio_fan_data *fan_data, 104static int fan_alarm_init(struct gpio_fan_data *fan_data)
117 struct gpio_fan_alarm *alarm)
118{ 105{
119 int err; 106 int err;
120 int alarm_irq; 107 int alarm_irq;
121 struct device *dev = fan_data->dev; 108 struct device *dev = fan_data->dev;
122 109 struct gpio_fan_alarm *alarm = fan_data->alarm;
123 fan_data->alarm = alarm;
124 110
125 err = devm_gpio_request(dev, alarm->gpio, "GPIO fan alarm"); 111 err = devm_gpio_request(dev, alarm->gpio, "GPIO fan alarm");
126 if (err) 112 if (err)
@@ -379,12 +365,11 @@ static const struct attribute_group *gpio_fan_groups[] = {
379 NULL 365 NULL
380}; 366};
381 367
382static int fan_ctrl_init(struct gpio_fan_data *fan_data, 368static int fan_ctrl_init(struct gpio_fan_data *fan_data)
383 struct gpio_fan_platform_data *pdata)
384{ 369{
385 struct device *dev = fan_data->dev; 370 struct device *dev = fan_data->dev;
386 int num_ctrl = pdata->num_ctrl; 371 int num_ctrl = fan_data->num_ctrl;
387 unsigned *ctrl = pdata->ctrl; 372 unsigned int *ctrl = fan_data->ctrl;
388 int i, err; 373 int i, err;
389 374
390 for (i = 0; i < num_ctrl; i++) { 375 for (i = 0; i < num_ctrl; i++) {
@@ -399,10 +384,6 @@ static int fan_ctrl_init(struct gpio_fan_data *fan_data,
399 return err; 384 return err;
400 } 385 }
401 386
402 fan_data->num_ctrl = num_ctrl;
403 fan_data->ctrl = ctrl;
404 fan_data->num_speed = pdata->num_speed;
405 fan_data->speed = pdata->speed;
406 fan_data->pwm_enable = true; /* Enable manual fan speed control. */ 387 fan_data->pwm_enable = true; /* Enable manual fan speed control. */
407 fan_data->speed_index = get_fan_speed_index(fan_data); 388 fan_data->speed_index = get_fan_speed_index(fan_data);
408 if (fan_data->speed_index < 0) 389 if (fan_data->speed_index < 0)
@@ -456,21 +437,19 @@ static const struct thermal_cooling_device_ops gpio_fan_cool_ops = {
456/* 437/*
457 * Translate OpenFirmware node properties into platform_data 438 * Translate OpenFirmware node properties into platform_data
458 */ 439 */
459static int gpio_fan_get_of_pdata(struct device *dev, 440static int gpio_fan_get_of_data(struct gpio_fan_data *fan_data)
460 struct gpio_fan_platform_data *pdata)
461{ 441{
462 struct device_node *node;
463 struct gpio_fan_speed *speed; 442 struct gpio_fan_speed *speed;
443 struct device *dev = fan_data->dev;
444 struct device_node *np = dev->of_node;
464 unsigned *ctrl; 445 unsigned *ctrl;
465 unsigned i; 446 unsigned i;
466 u32 u; 447 u32 u;
467 struct property *prop; 448 struct property *prop;
468 const __be32 *p; 449 const __be32 *p;
469 450
470 node = dev->of_node;
471
472 /* Alarm GPIO if one exists */ 451 /* Alarm GPIO if one exists */
473 if (of_gpio_named_count(node, "alarm-gpios") > 0) { 452 if (of_gpio_named_count(np, "alarm-gpios") > 0) {
474 struct gpio_fan_alarm *alarm; 453 struct gpio_fan_alarm *alarm;
475 int val; 454 int val;
476 enum of_gpio_flags flags; 455 enum of_gpio_flags flags;
@@ -480,39 +459,39 @@ static int gpio_fan_get_of_pdata(struct device *dev,
480 if (!alarm) 459 if (!alarm)
481 return -ENOMEM; 460 return -ENOMEM;
482 461
483 val = of_get_named_gpio_flags(node, "alarm-gpios", 0, &flags); 462 val = of_get_named_gpio_flags(np, "alarm-gpios", 0, &flags);
484 if (val < 0) 463 if (val < 0)
485 return val; 464 return val;
486 alarm->gpio = val; 465 alarm->gpio = val;
487 alarm->active_low = flags & OF_GPIO_ACTIVE_LOW; 466 alarm->active_low = flags & OF_GPIO_ACTIVE_LOW;
488 467
489 pdata->alarm = alarm; 468 fan_data->alarm = alarm;
490 } 469 }
491 470
492 /* Fill GPIO pin array */ 471 /* Fill GPIO pin array */
493 pdata->num_ctrl = of_gpio_count(node); 472 fan_data->num_ctrl = of_gpio_count(np);
494 if (pdata->num_ctrl <= 0) { 473 if (fan_data->num_ctrl <= 0) {
495 if (pdata->alarm) 474 if (fan_data->alarm)
496 return 0; 475 return 0;
497 dev_err(dev, "DT properties empty / missing"); 476 dev_err(dev, "DT properties empty / missing");
498 return -ENODEV; 477 return -ENODEV;
499 } 478 }
500 ctrl = devm_kzalloc(dev, pdata->num_ctrl * sizeof(unsigned), 479 ctrl = devm_kzalloc(dev, fan_data->num_ctrl * sizeof(unsigned int),
501 GFP_KERNEL); 480 GFP_KERNEL);
502 if (!ctrl) 481 if (!ctrl)
503 return -ENOMEM; 482 return -ENOMEM;
504 for (i = 0; i < pdata->num_ctrl; i++) { 483 for (i = 0; i < fan_data->num_ctrl; i++) {
505 int val; 484 int val;
506 485
507 val = of_get_gpio(node, i); 486 val = of_get_gpio(np, i);
508 if (val < 0) 487 if (val < 0)
509 return val; 488 return val;
510 ctrl[i] = val; 489 ctrl[i] = val;
511 } 490 }
512 pdata->ctrl = ctrl; 491 fan_data->ctrl = ctrl;
513 492
514 /* Get number of RPM/ctrl_val pairs in speed map */ 493 /* Get number of RPM/ctrl_val pairs in speed map */
515 prop = of_find_property(node, "gpio-fan,speed-map", &i); 494 prop = of_find_property(np, "gpio-fan,speed-map", &i);
516 if (!prop) { 495 if (!prop) {
517 dev_err(dev, "gpio-fan,speed-map DT property missing"); 496 dev_err(dev, "gpio-fan,speed-map DT property missing");
518 return -ENODEV; 497 return -ENODEV;
@@ -522,7 +501,7 @@ static int gpio_fan_get_of_pdata(struct device *dev,
522 dev_err(dev, "gpio-fan,speed-map contains zero/odd number of entries"); 501 dev_err(dev, "gpio-fan,speed-map contains zero/odd number of entries");
523 return -ENODEV; 502 return -ENODEV;
524 } 503 }
525 pdata->num_speed = i / 2; 504 fan_data->num_speed = i / 2;
526 505
527 /* 506 /*
528 * Populate speed map 507 * Populate speed map
@@ -530,12 +509,12 @@ static int gpio_fan_get_of_pdata(struct device *dev,
530 * this needs splitting into pairs to create gpio_fan_speed structs 509 * this needs splitting into pairs to create gpio_fan_speed structs
531 */ 510 */
532 speed = devm_kzalloc(dev, 511 speed = devm_kzalloc(dev,
533 pdata->num_speed * sizeof(struct gpio_fan_speed), 512 fan_data->num_speed * sizeof(struct gpio_fan_speed),
534 GFP_KERNEL); 513 GFP_KERNEL);
535 if (!speed) 514 if (!speed)
536 return -ENOMEM; 515 return -ENOMEM;
537 p = NULL; 516 p = NULL;
538 for (i = 0; i < pdata->num_speed; i++) { 517 for (i = 0; i < fan_data->num_speed; i++) {
539 p = of_prop_next_u32(prop, p, &u); 518 p = of_prop_next_u32(prop, p, &u);
540 if (!p) 519 if (!p)
541 return -ENODEV; 520 return -ENODEV;
@@ -545,7 +524,7 @@ static int gpio_fan_get_of_pdata(struct device *dev,
545 return -ENODEV; 524 return -ENODEV;
546 speed[i].ctrl_val = u; 525 speed[i].ctrl_val = u;
547 } 526 }
548 pdata->speed = speed; 527 fan_data->speed = speed;
549 528
550 return 0; 529 return 0;
551} 530}
@@ -562,20 +541,13 @@ static int gpio_fan_probe(struct platform_device *pdev)
562 struct gpio_fan_data *fan_data; 541 struct gpio_fan_data *fan_data;
563 struct device *dev = &pdev->dev; 542 struct device *dev = &pdev->dev;
564 struct device_node *np = dev->of_node; 543 struct device_node *np = dev->of_node;
565 struct gpio_fan_platform_data *pdata;
566 544
567 fan_data = devm_kzalloc(dev, sizeof(struct gpio_fan_data), 545 fan_data = devm_kzalloc(dev, sizeof(struct gpio_fan_data),
568 GFP_KERNEL); 546 GFP_KERNEL);
569 if (!fan_data) 547 if (!fan_data)
570 return -ENOMEM; 548 return -ENOMEM;
571 549
572 pdata = devm_kzalloc(dev, 550 err = gpio_fan_get_of_data(fan_data);
573 sizeof(struct gpio_fan_platform_data),
574 GFP_KERNEL);
575 if (!pdata)
576 return -ENOMEM;
577
578 err = gpio_fan_get_of_pdata(dev, pdata);
579 if (err) 551 if (err)
580 return err; 552 return err;
581 553
@@ -584,17 +556,17 @@ static int gpio_fan_probe(struct platform_device *pdev)
584 mutex_init(&fan_data->lock); 556 mutex_init(&fan_data->lock);
585 557
586 /* Configure alarm GPIO if available. */ 558 /* Configure alarm GPIO if available. */
587 if (pdata->alarm) { 559 if (fan_data->alarm) {
588 err = fan_alarm_init(fan_data, pdata->alarm); 560 err = fan_alarm_init(fan_data);
589 if (err) 561 if (err)
590 return err; 562 return err;
591 } 563 }
592 564
593 /* Configure control GPIOs if available. */ 565 /* Configure control GPIOs if available. */
594 if (pdata->ctrl && pdata->num_ctrl > 0) { 566 if (fan_data->ctrl && fan_data->num_ctrl > 0) {
595 if (!pdata->speed || pdata->num_speed <= 1) 567 if (!fan_data->speed || fan_data->num_speed <= 1)
596 return -EINVAL; 568 return -EINVAL;
597 err = fan_ctrl_init(fan_data, pdata); 569 err = fan_ctrl_init(fan_data);
598 if (err) 570 if (err)
599 return err; 571 return err;
600 } 572 }