pwm: cros-ec: Change prototype of helpers to prepare further changes
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Wed, 14 Feb 2024 09:31:16 +0000 (10:31 +0100)
committerUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Thu, 15 Feb 2024 11:59:21 +0000 (12:59 +0100)
pwm_chip allocation and registration is about to change. For that the
number of PWM devices must be known earlier in cros_ec_pwm_probe(). So
make cros_ec_pwm_get_duty() and cros_ec_num_pwms() independent of
struct cros_ec_pwm_device which is only available later.

Reviewed-by: Tzung-Bi Shih <tzungbi@kernel.org>
Link: https://lore.kernel.org/r/c0cfc75c1cba0f735555e0138387143ec101feb3.1707900770.git.u.kleine-koenig@pengutronix.de
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
drivers/pwm/pwm-cros-ec.c

index 339cedf..e556f62 100644 (file)
@@ -93,9 +93,8 @@ static int cros_ec_pwm_set_duty(struct cros_ec_pwm_device *ec_pwm, u8 index,
        return cros_ec_cmd_xfer_status(ec, msg);
 }
 
-static int cros_ec_pwm_get_duty(struct cros_ec_pwm_device *ec_pwm, u8 index)
+static int cros_ec_pwm_get_duty(struct cros_ec_device *ec, bool use_pwm_type, u8 index)
 {
-       struct cros_ec_device *ec = ec_pwm->ec;
        struct {
                struct cros_ec_command msg;
                union {
@@ -115,7 +114,7 @@ static int cros_ec_pwm_get_duty(struct cros_ec_pwm_device *ec_pwm, u8 index)
        msg->insize = sizeof(*resp);
        msg->outsize = sizeof(*params);
 
-       if (ec_pwm->use_pwm_type) {
+       if (use_pwm_type) {
                ret = cros_ec_dt_type_to_pwm_type(index, &params->pwm_type);
                if (ret) {
                        dev_err(ec->dev, "Invalid PWM type index: %d\n", index);
@@ -171,7 +170,7 @@ static int cros_ec_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
        struct cros_ec_pwm *channel = &ec_pwm->channel[pwm->hwpwm];
        int ret;
 
-       ret = cros_ec_pwm_get_duty(ec_pwm, pwm->hwpwm);
+       ret = cros_ec_pwm_get_duty(ec_pwm->ec, ec_pwm->use_pwm_type, pwm->hwpwm);
        if (ret < 0) {
                dev_err(chip->dev, "error getting initial duty: %d\n", ret);
                return ret;
@@ -226,13 +225,17 @@ static const struct pwm_ops cros_ec_pwm_ops = {
  * of PWMs it supports directly, so we have to read the pwm duty cycle for
  * subsequent channels until we get an error.
  */
-static int cros_ec_num_pwms(struct cros_ec_pwm_device *ec_pwm)
+static int cros_ec_num_pwms(struct cros_ec_device *ec)
 {
        int i, ret;
 
        /* The index field is only 8 bits */
        for (i = 0; i <= U8_MAX; i++) {
-               ret = cros_ec_pwm_get_duty(ec_pwm, i);
+               /*
+                * Note that this function is only called when use_pwm_type is
+                * false. With use_pwm_type == true the number of PWMs is fixed.
+                */
+               ret = cros_ec_pwm_get_duty(ec, false, i);
                /*
                 * We look for SUCCESS, INVALID_COMMAND, or INVALID_PARAM
                 * responses; everything else is treated as an error.
@@ -283,7 +286,7 @@ static int cros_ec_pwm_probe(struct platform_device *pdev)
        if (ec_pwm->use_pwm_type) {
                chip->npwm = CROS_EC_PWM_DT_COUNT;
        } else {
-               ret = cros_ec_num_pwms(ec_pwm);
+               ret = cros_ec_num_pwms(ec);
                if (ret < 0)
                        return dev_err_probe(dev, ret, "Couldn't find PWMs\n");
                chip->npwm = ret;