mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 23:22:31 +02:00
pwm: cros-ec: Make use of devm_pwmchip_alloc() function
This prepares the pwm-cros-ec driver to further changes of the pwm core outlined in the commit introducing devm_pwmchip_alloc(). There is no intended semantical change and the driver should behave as before. The probe function had to be changed a bit because the number of PWMs must be determined before allocation of the pwm_chip and its private data now. Reviewed-by: Tzung-Bi Shih <tzungbi@kernel.org> Link: https://lore.kernel.org/r/b0afe9e25340f0a274ff3806687cf37a6cc31557.1707900770.git.u.kleine-koenig@pengutronix.de Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
This commit is contained in:
parent
19a568a8d3
commit
452be9421e
|
|
@ -19,13 +19,11 @@
|
|||
* struct cros_ec_pwm_device - Driver data for EC PWM
|
||||
*
|
||||
* @ec: Pointer to EC device
|
||||
* @chip: PWM controller chip
|
||||
* @use_pwm_type: Use PWM types instead of generic channels
|
||||
* @channel: array with per-channel data
|
||||
*/
|
||||
struct cros_ec_pwm_device {
|
||||
struct cros_ec_device *ec;
|
||||
struct pwm_chip chip;
|
||||
bool use_pwm_type;
|
||||
struct cros_ec_pwm *channel;
|
||||
};
|
||||
|
|
@ -40,7 +38,7 @@ struct cros_ec_pwm {
|
|||
|
||||
static inline struct cros_ec_pwm_device *pwm_to_cros_ec_pwm(struct pwm_chip *chip)
|
||||
{
|
||||
return container_of(chip, struct cros_ec_pwm_device, chip);
|
||||
return pwmchip_get_drvdata(chip);
|
||||
}
|
||||
|
||||
static int cros_ec_dt_type_to_pwm_type(u8 dt_index, u8 *pwm_type)
|
||||
|
|
@ -264,34 +262,35 @@ static int cros_ec_pwm_probe(struct platform_device *pdev)
|
|||
struct device_node *np = pdev->dev.of_node;
|
||||
struct cros_ec_pwm_device *ec_pwm;
|
||||
struct pwm_chip *chip;
|
||||
bool use_pwm_type = false;
|
||||
unsigned int npwm;
|
||||
int ret;
|
||||
|
||||
if (!ec)
|
||||
return dev_err_probe(dev, -EINVAL, "no parent EC device\n");
|
||||
|
||||
ec_pwm = devm_kzalloc(dev, sizeof(*ec_pwm), GFP_KERNEL);
|
||||
if (!ec_pwm)
|
||||
return -ENOMEM;
|
||||
chip = &ec_pwm->chip;
|
||||
ec_pwm->ec = ec;
|
||||
|
||||
if (of_device_is_compatible(np, "google,cros-ec-pwm-type"))
|
||||
ec_pwm->use_pwm_type = true;
|
||||
|
||||
/* PWM chip */
|
||||
chip->dev = dev;
|
||||
chip->ops = &cros_ec_pwm_ops;
|
||||
chip->of_xlate = cros_ec_pwm_xlate;
|
||||
|
||||
if (ec_pwm->use_pwm_type) {
|
||||
chip->npwm = CROS_EC_PWM_DT_COUNT;
|
||||
if (of_device_is_compatible(np, "google,cros-ec-pwm-type")) {
|
||||
use_pwm_type = true;
|
||||
npwm = CROS_EC_PWM_DT_COUNT;
|
||||
} else {
|
||||
ret = cros_ec_num_pwms(ec);
|
||||
if (ret < 0)
|
||||
return dev_err_probe(dev, ret, "Couldn't find PWMs\n");
|
||||
chip->npwm = ret;
|
||||
npwm = ret;
|
||||
}
|
||||
|
||||
chip = devm_pwmchip_alloc(dev, npwm, sizeof(*ec_pwm));
|
||||
if (IS_ERR(chip))
|
||||
return PTR_ERR(chip);
|
||||
|
||||
ec_pwm = pwm_to_cros_ec_pwm(chip);
|
||||
ec_pwm->use_pwm_type = use_pwm_type;
|
||||
ec_pwm->ec = ec;
|
||||
|
||||
/* PWM chip */
|
||||
chip->ops = &cros_ec_pwm_ops;
|
||||
chip->of_xlate = cros_ec_pwm_xlate;
|
||||
|
||||
ec_pwm->channel = devm_kcalloc(dev, chip->npwm, sizeof(*ec_pwm->channel),
|
||||
GFP_KERNEL);
|
||||
if (!ec_pwm->channel)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user