diff options
Diffstat (limited to 'drivers/pwm/pwm-lpss.c')
| -rw-r--r-- | drivers/pwm/pwm-lpss.c | 46 | 
1 files changed, 40 insertions, 6 deletions
diff --git a/drivers/pwm/pwm-lpss.c b/drivers/pwm/pwm-lpss.c index 36d4e83e6b79..accdef5dd58e 100644 --- a/drivers/pwm/pwm-lpss.c +++ b/drivers/pwm/pwm-lpss.c @@ -10,6 +10,7 @@   * Author: Alan Cox <[email protected]>   */ +#include <linux/bits.h>  #include <linux/delay.h>  #include <linux/io.h>  #include <linux/iopoll.h> @@ -18,17 +19,53 @@  #include <linux/pm_runtime.h>  #include <linux/time.h> +#define DEFAULT_SYMBOL_NAMESPACE PWM_LPSS +  #include "pwm-lpss.h"  #define PWM				0x00000000  #define PWM_ENABLE			BIT(31)  #define PWM_SW_UPDATE			BIT(30)  #define PWM_BASE_UNIT_SHIFT		8 -#define PWM_ON_TIME_DIV_MASK		0x000000ff +#define PWM_ON_TIME_DIV_MASK		GENMASK(7, 0)  /* Size of each PWM register space if multiple */  #define PWM_SIZE			0x400 +/* BayTrail */ +const struct pwm_lpss_boardinfo pwm_lpss_byt_info = { +	.clk_rate = 25000000, +	.npwm = 1, +	.base_unit_bits = 16, +}; +EXPORT_SYMBOL_GPL(pwm_lpss_byt_info); + +/* Braswell */ +const struct pwm_lpss_boardinfo pwm_lpss_bsw_info = { +	.clk_rate = 19200000, +	.npwm = 1, +	.base_unit_bits = 16, +	.other_devices_aml_touches_pwm_regs = true, +}; +EXPORT_SYMBOL_GPL(pwm_lpss_bsw_info); + +/* Broxton */ +const struct pwm_lpss_boardinfo pwm_lpss_bxt_info = { +	.clk_rate = 19200000, +	.npwm = 4, +	.base_unit_bits = 22, +	.bypass = true, +}; +EXPORT_SYMBOL_GPL(pwm_lpss_bxt_info); + +/* Tangier */ +const struct pwm_lpss_boardinfo pwm_lpss_tng_info = { +	.clk_rate = 19200000, +	.npwm = 4, +	.base_unit_bits = 22, +}; +EXPORT_SYMBOL_GPL(pwm_lpss_tng_info); +  static inline struct pwm_lpss_chip *to_lpwm(struct pwm_chip *chip)  {  	return container_of(chip, struct pwm_lpss_chip, chip); @@ -207,7 +244,7 @@ static const struct pwm_ops pwm_lpss_ops = {  	.owner = THIS_MODULE,  }; -struct pwm_lpss_chip *pwm_lpss_probe(struct device *dev, struct resource *r, +struct pwm_lpss_chip *pwm_lpss_probe(struct device *dev, void __iomem *base,  				     const struct pwm_lpss_boardinfo *info)  {  	struct pwm_lpss_chip *lpwm; @@ -222,10 +259,7 @@ struct pwm_lpss_chip *pwm_lpss_probe(struct device *dev, struct resource *r,  	if (!lpwm)  		return ERR_PTR(-ENOMEM); -	lpwm->regs = devm_ioremap_resource(dev, r); -	if (IS_ERR(lpwm->regs)) -		return ERR_CAST(lpwm->regs); - +	lpwm->regs = base;  	lpwm->info = info;  	c = lpwm->info->clk_rate;  |