pwm: jz4740: Allow selection of PWM channels 0 and 1
The TCU channels 0 and 1 were previously reserved for system tasks, and thus unavailable for PWM. Signed-off-by: Paul Cercueil <paul@crapouillou.net> Tested-by: Mathieu Malaterre <malat@debian.org> Tested-by: Artur Rojek <contact@artur-rojek.eu> Signed-off-by: Thierry Reding <thierry.reding@gmail.com>alistair/sensors
parent
c2693514a0
commit
a2005fc791
|
@ -33,6 +33,19 @@ static inline struct jz4740_pwm_chip *to_jz4740(struct pwm_chip *chip)
|
||||||
return container_of(chip, struct jz4740_pwm_chip, chip);
|
return container_of(chip, struct jz4740_pwm_chip, chip);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool jz4740_pwm_can_use_chn(struct jz4740_pwm_chip *jz,
|
||||||
|
unsigned int channel)
|
||||||
|
{
|
||||||
|
/* Enable all TCU channels for PWM use by default except channels 0/1 */
|
||||||
|
u32 pwm_channels_mask = GENMASK(NUM_PWM - 1, 2);
|
||||||
|
|
||||||
|
device_property_read_u32(jz->chip.dev->parent,
|
||||||
|
"ingenic,pwm-channels-mask",
|
||||||
|
&pwm_channels_mask);
|
||||||
|
|
||||||
|
return !!(pwm_channels_mask & BIT(channel));
|
||||||
|
}
|
||||||
|
|
||||||
static int jz4740_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm)
|
static int jz4740_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm)
|
||||||
{
|
{
|
||||||
struct jz4740_pwm_chip *jz = to_jz4740(chip);
|
struct jz4740_pwm_chip *jz = to_jz4740(chip);
|
||||||
|
@ -40,11 +53,7 @@ static int jz4740_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm)
|
||||||
char name[16];
|
char name[16];
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
/*
|
if (!jz4740_pwm_can_use_chn(jz, pwm->hwpwm))
|
||||||
* Timers 0 and 1 are used for system tasks, so they are unavailable
|
|
||||||
* for use as PWMs.
|
|
||||||
*/
|
|
||||||
if (pwm->hwpwm < 2)
|
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
|
|
||||||
snprintf(name, sizeof(name), "timer%u", pwm->hwpwm);
|
snprintf(name, sizeof(name), "timer%u", pwm->hwpwm);
|
||||||
|
|
Loading…
Reference in New Issue