Lines Matching +full:ec +full:- +full:pwm

1 // SPDX-License-Identifier: GPL-2.0-or-later
4 * e-book readers designed by the original design manufacturer Netronix, Inc.
5 * It contains RTC, battery monitoring, system power management, and PWM
8 * This driver implements PWM output.
13 * - The get_state callback is not implemented, because the current state of
14 * the PWM output can't be read back from the hardware.
15 * - The hardware can only generate normal polarity output.
16 * - The period and duty cycle can't be changed together in one atomic action.
22 #include <linux/pwm.h>
27 struct ntxec *ec; member
44 * The time base used in the EC is 8MHz, or 125ns. Period and duty cycle are
66 * is longer than the new period, the EC may output 100% for a moment. in ntxec_pwm_set_raw_period_and_duty_cycle()
79 return regmap_multi_reg_write(priv->ec->regmap, regs, ARRAY_SIZE(regs)); in ntxec_pwm_set_raw_period_and_duty_cycle()
89 if (state->polarity != PWM_POLARITY_NORMAL) in ntxec_pwm_apply()
90 return -EINVAL; in ntxec_pwm_apply()
92 period = min_t(u64, state->period, MAX_PERIOD_NS); in ntxec_pwm_apply()
93 duty = min_t(u64, state->duty_cycle, period); in ntxec_pwm_apply()
107 if (state->enabled && duty != 0) { in ntxec_pwm_apply()
112 res = regmap_write(priv->ec->regmap, NTXEC_REG_ENABLE, ntxec_reg8(1)); in ntxec_pwm_apply()
116 /* Disable the auto-off timer */ in ntxec_pwm_apply()
117 res = regmap_write(priv->ec->regmap, NTXEC_REG_AUTO_OFF_HI, ntxec_reg8(0xff)); in ntxec_pwm_apply()
121 return regmap_write(priv->ec->regmap, NTXEC_REG_AUTO_OFF_LO, ntxec_reg8(0xff)); in ntxec_pwm_apply()
123 return regmap_write(priv->ec->regmap, NTXEC_REG_ENABLE, ntxec_reg8(0)); in ntxec_pwm_apply()
137 struct ntxec *ec = dev_get_drvdata(pdev->dev.parent); in ntxec_pwm_probe() local
141 device_set_of_node_from_dev(&pdev->dev, pdev->dev.parent); in ntxec_pwm_probe()
143 chip = devm_pwmchip_alloc(&pdev->dev, 1, sizeof(*priv)); in ntxec_pwm_probe()
148 priv->ec = ec; in ntxec_pwm_probe()
149 chip->ops = &ntxec_pwm_ops; in ntxec_pwm_probe()
151 return devm_pwmchip_add(&pdev->dev, chip); in ntxec_pwm_probe()
156 .name = "ntxec-pwm",
163 MODULE_DESCRIPTION("PWM driver for Netronix EC");
165 MODULE_ALIAS("platform:ntxec-pwm");