@@ -79,6 +79,7 @@ struct samsung_pwm_channel {
* @tclk1: external clock 1 (can be ERR_PTR if not present)
*/
struct samsung_pwm_chip {
+ struct device *parent;
struct samsung_pwm_variant variant;
u8 inverter_mask;
u8 disabled_mask;
@@ -196,12 +197,12 @@ static unsigned long pwm_samsung_calc_tin(struct pwm_chip *chip,
return rate;
}
- dev_warn(chip->dev,
+ dev_warn(our_chip->parent,
"tclk of PWM %d is inoperational, using tdiv\n", chan);
}
rate = pwm_samsung_get_tin_rate(our_chip, chan);
- dev_dbg(chip->dev, "tin parent at %lu\n", rate);
+ dev_dbg(our_chip->parent, "tin parent at %lu\n", rate);
/*
* Compare minimum PWM frequency that can be achieved with possible
@@ -231,7 +232,7 @@ static int pwm_samsung_request(struct pwm_chip *chip, struct pwm_device *pwm)
struct samsung_pwm_chip *our_chip = to_samsung_pwm_chip(chip);
if (!(our_chip->variant.output_mask & BIT(pwm->hwpwm))) {
- dev_warn(chip->dev,
+ dev_warn(our_chip->parent,
"tried to request PWM channel %d without output\n",
pwm->hwpwm);
return -EINVAL;
@@ -325,12 +326,12 @@ static int __pwm_samsung_config(struct pwm_chip *chip, struct pwm_device *pwm,
period = NSEC_PER_SEC / period_ns;
- dev_dbg(chip->dev, "duty_ns=%d, period_ns=%d (%u)\n",
+ dev_dbg(our_chip->parent, "duty_ns=%d, period_ns=%d (%u)\n",
duty_ns, period_ns, period);
tin_rate = pwm_samsung_calc_tin(chip, pwm->hwpwm, period);
- dev_dbg(chip->dev, "tin_rate=%lu\n", tin_rate);
+ dev_dbg(our_chip->parent, "tin_rate=%lu\n", tin_rate);
tin_ns = NSEC_PER_SEC / tin_rate;
tcnt = period_ns / tin_ns;
@@ -354,7 +355,7 @@ static int __pwm_samsung_config(struct pwm_chip *chip, struct pwm_device *pwm,
/* -1UL will give 100% duty. */
--tcmp;
- dev_dbg(chip->dev,
+ dev_dbg(our_chip->parent,
"tin_ns=%u, tcmp=%u/%u\n", tin_ns, tcmp, tcnt);
/* Update PWM registers. */
@@ -367,7 +368,7 @@ static int __pwm_samsung_config(struct pwm_chip *chip, struct pwm_device *pwm,
* shortly afer this update (before it autoreloaded the new values).
*/
if (oldtcmp == (u32) -1) {
- dev_dbg(chip->dev, "Forcing manual update");
+ dev_dbg(our_chip->parent, "Forcing manual update");
pwm_samsung_manual_update(our_chip, pwm);
}
@@ -509,7 +510,7 @@ MODULE_DEVICE_TABLE(of, samsung_pwm_matches);
static int pwm_samsung_parse_dt(struct pwm_chip *chip)
{
struct samsung_pwm_chip *our_chip = to_samsung_pwm_chip(chip);
- struct device_node *np = chip->dev->of_node;
+ struct device_node *np = our_chip->parent->of_node;
const struct of_device_id *match;
struct property *prop;
const __be32 *cur;
@@ -523,7 +524,7 @@ static int pwm_samsung_parse_dt(struct pwm_chip *chip)
of_property_for_each_u32(np, "samsung,pwm-outputs", prop, cur, val) {
if (val >= SAMSUNG_PWM_NUM) {
- dev_err(chip->dev,
+ dev_err(our_chip->parent,
"%s: invalid channel index in samsung,pwm-outputs property\n",
__func__);
continue;
@@ -554,6 +555,7 @@ static int pwm_samsung_probe(struct platform_device *pdev)
our_chip = to_samsung_pwm_chip(chip);
chip->ops = &pwm_samsung_ops;
+ our_chip->parent = &pdev->dev;
our_chip->inverter_mask = BIT(SAMSUNG_PWM_NUM) - 1;
if (IS_ENABLED(CONFIG_OF) && pdev->dev.of_node) {
struct pwm_chip::dev is about to change. To not have to touch this driver in the same commit as struct pwm_chip::dev, store a pointer to the parent device in driver data. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> --- drivers/pwm/pwm-samsung.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-)