diff options
Diffstat (limited to 'drivers/pwm/pwm-twl-led.c')
| -rw-r--r-- | drivers/pwm/pwm-twl-led.c | 55 | 
1 files changed, 29 insertions, 26 deletions
diff --git a/drivers/pwm/pwm-twl-led.c b/drivers/pwm/pwm-twl-led.c index c670ccb81653..4b10a8dab312 100644 --- a/drivers/pwm/pwm-twl-led.c +++ b/drivers/pwm/pwm-twl-led.c @@ -62,13 +62,12 @@  #define TWL6040_LED_MODE_MASK	0x03  struct twl_pwmled_chip { -	struct pwm_chip chip;  	struct mutex mutex;  };  static inline struct twl_pwmled_chip *to_twl(struct pwm_chip *chip)  { -	return container_of(chip, struct twl_pwmled_chip, chip); +	return pwmchip_get_drvdata(chip);  }  static int twl4030_pwmled_config(struct pwm_chip *chip, struct pwm_device *pwm, @@ -100,7 +99,7 @@ static int twl4030_pwmled_config(struct pwm_chip *chip, struct pwm_device *pwm,  	ret = twl_i2c_write(TWL4030_MODULE_LED, pwm_config, base, 2);  	if (ret < 0) -		dev_err(chip->dev, "%s: Failed to configure PWM\n", pwm->label); +		dev_err(pwmchip_parent(chip), "%s: Failed to configure PWM\n", pwm->label);  	return ret;  } @@ -114,7 +113,7 @@ static int twl4030_pwmled_enable(struct pwm_chip *chip, struct pwm_device *pwm)  	mutex_lock(&twl->mutex);  	ret = twl_i2c_read_u8(TWL4030_MODULE_LED, &val, TWL4030_LEDEN_REG);  	if (ret < 0) { -		dev_err(chip->dev, "%s: Failed to read LEDEN\n", pwm->label); +		dev_err(pwmchip_parent(chip), "%s: Failed to read LEDEN\n", pwm->label);  		goto out;  	} @@ -122,7 +121,7 @@ static int twl4030_pwmled_enable(struct pwm_chip *chip, struct pwm_device *pwm)  	ret = twl_i2c_write_u8(TWL4030_MODULE_LED, val, TWL4030_LEDEN_REG);  	if (ret < 0) -		dev_err(chip->dev, "%s: Failed to enable PWM\n", pwm->label); +		dev_err(pwmchip_parent(chip), "%s: Failed to enable PWM\n", pwm->label);  out:  	mutex_unlock(&twl->mutex); @@ -139,7 +138,7 @@ static void twl4030_pwmled_disable(struct pwm_chip *chip,  	mutex_lock(&twl->mutex);  	ret = twl_i2c_read_u8(TWL4030_MODULE_LED, &val, TWL4030_LEDEN_REG);  	if (ret < 0) { -		dev_err(chip->dev, "%s: Failed to read LEDEN\n", pwm->label); +		dev_err(pwmchip_parent(chip), "%s: Failed to read LEDEN\n", pwm->label);  		goto out;  	} @@ -147,7 +146,7 @@ static void twl4030_pwmled_disable(struct pwm_chip *chip,  	ret = twl_i2c_write_u8(TWL4030_MODULE_LED, val, TWL4030_LEDEN_REG);  	if (ret < 0) -		dev_err(chip->dev, "%s: Failed to disable PWM\n", pwm->label); +		dev_err(pwmchip_parent(chip), "%s: Failed to disable PWM\n", pwm->label);  out:  	mutex_unlock(&twl->mutex); @@ -203,7 +202,7 @@ static int twl6030_pwmled_config(struct pwm_chip *chip, struct pwm_device *pwm,  	ret = twl_i2c_write_u8(TWL6030_MODULE_ID1, on_time,  			       TWL6030_LED_PWM_CTRL1);  	if (ret < 0) -		dev_err(chip->dev, "%s: Failed to configure PWM\n", pwm->label); +		dev_err(pwmchip_parent(chip), "%s: Failed to configure PWM\n", pwm->label);  	return ret;  } @@ -217,7 +216,7 @@ static int twl6030_pwmled_enable(struct pwm_chip *chip, struct pwm_device *pwm)  	mutex_lock(&twl->mutex);  	ret = twl_i2c_read_u8(TWL6030_MODULE_ID1, &val, TWL6030_LED_PWM_CTRL2);  	if (ret < 0) { -		dev_err(chip->dev, "%s: Failed to read PWM_CTRL2\n", +		dev_err(pwmchip_parent(chip), "%s: Failed to read PWM_CTRL2\n",  			pwm->label);  		goto out;  	} @@ -227,7 +226,7 @@ static int twl6030_pwmled_enable(struct pwm_chip *chip, struct pwm_device *pwm)  	ret = twl_i2c_write_u8(TWL6030_MODULE_ID1, val, TWL6030_LED_PWM_CTRL2);  	if (ret < 0) -		dev_err(chip->dev, "%s: Failed to enable PWM\n", pwm->label); +		dev_err(pwmchip_parent(chip), "%s: Failed to enable PWM\n", pwm->label);  out:  	mutex_unlock(&twl->mutex); @@ -244,7 +243,7 @@ static void twl6030_pwmled_disable(struct pwm_chip *chip,  	mutex_lock(&twl->mutex);  	ret = twl_i2c_read_u8(TWL6030_MODULE_ID1, &val, TWL6030_LED_PWM_CTRL2);  	if (ret < 0) { -		dev_err(chip->dev, "%s: Failed to read PWM_CTRL2\n", +		dev_err(pwmchip_parent(chip), "%s: Failed to read PWM_CTRL2\n",  			pwm->label);  		goto out;  	} @@ -254,7 +253,7 @@ static void twl6030_pwmled_disable(struct pwm_chip *chip,  	ret = twl_i2c_write_u8(TWL6030_MODULE_ID1, val, TWL6030_LED_PWM_CTRL2);  	if (ret < 0) -		dev_err(chip->dev, "%s: Failed to disable PWM\n", pwm->label); +		dev_err(pwmchip_parent(chip), "%s: Failed to disable PWM\n", pwm->label);  out:  	mutex_unlock(&twl->mutex); @@ -295,7 +294,7 @@ static int twl6030_pwmled_request(struct pwm_chip *chip, struct pwm_device *pwm)  	mutex_lock(&twl->mutex);  	ret = twl_i2c_read_u8(TWL6030_MODULE_ID1, &val, TWL6030_LED_PWM_CTRL2);  	if (ret < 0) { -		dev_err(chip->dev, "%s: Failed to read PWM_CTRL2\n", +		dev_err(pwmchip_parent(chip), "%s: Failed to read PWM_CTRL2\n",  			pwm->label);  		goto out;  	} @@ -305,7 +304,7 @@ static int twl6030_pwmled_request(struct pwm_chip *chip, struct pwm_device *pwm)  	ret = twl_i2c_write_u8(TWL6030_MODULE_ID1, val, TWL6030_LED_PWM_CTRL2);  	if (ret < 0) -		dev_err(chip->dev, "%s: Failed to request PWM\n", pwm->label); +		dev_err(pwmchip_parent(chip), "%s: Failed to request PWM\n", pwm->label);  out:  	mutex_unlock(&twl->mutex); @@ -321,7 +320,7 @@ static void twl6030_pwmled_free(struct pwm_chip *chip, struct pwm_device *pwm)  	mutex_lock(&twl->mutex);  	ret = twl_i2c_read_u8(TWL6030_MODULE_ID1, &val, TWL6030_LED_PWM_CTRL2);  	if (ret < 0) { -		dev_err(chip->dev, "%s: Failed to read PWM_CTRL2\n", +		dev_err(pwmchip_parent(chip), "%s: Failed to read PWM_CTRL2\n",  			pwm->label);  		goto out;  	} @@ -331,7 +330,7 @@ static void twl6030_pwmled_free(struct pwm_chip *chip, struct pwm_device *pwm)  	ret = twl_i2c_write_u8(TWL6030_MODULE_ID1, val, TWL6030_LED_PWM_CTRL2);  	if (ret < 0) -		dev_err(chip->dev, "%s: Failed to free PWM\n", pwm->label); +		dev_err(pwmchip_parent(chip), "%s: Failed to free PWM\n", pwm->label);  out:  	mutex_unlock(&twl->mutex); @@ -345,25 +344,29 @@ static const struct pwm_ops twl6030_pwmled_ops = {  static int twl_pwmled_probe(struct platform_device *pdev)  { +	struct pwm_chip *chip;  	struct twl_pwmled_chip *twl; - -	twl = devm_kzalloc(&pdev->dev, sizeof(*twl), GFP_KERNEL); -	if (!twl) -		return -ENOMEM; +	unsigned int npwm; +	const struct pwm_ops *ops;  	if (twl_class_is_4030()) { -		twl->chip.ops = &twl4030_pwmled_ops; -		twl->chip.npwm = 2; +		ops = &twl4030_pwmled_ops; +		npwm = 2;  	} else { -		twl->chip.ops = &twl6030_pwmled_ops; -		twl->chip.npwm = 1; +		ops = &twl6030_pwmled_ops; +		npwm = 1;  	} -	twl->chip.dev = &pdev->dev; +	chip = devm_pwmchip_alloc(&pdev->dev, npwm, sizeof(*twl)); +	if (IS_ERR(chip)) +		return PTR_ERR(chip); +	twl = to_twl(chip); + +	chip->ops = ops;  	mutex_init(&twl->mutex); -	return devm_pwmchip_add(&pdev->dev, &twl->chip); +	return devm_pwmchip_add(&pdev->dev, chip);  }  #ifdef CONFIG_OF  | 
