diff --git a/drivers/seco/cpld.c b/drivers/seco/cpld.c index b0c0cc19a49500b4ce8405fe3627ed60206eb1b1..2cd34aa46a70800690bb449fd69b3d1bf323d444 100644 --- a/drivers/seco/cpld.c +++ b/drivers/seco/cpld.c @@ -41,7 +41,7 @@ void cpld_reg_write (unsigned int addr, uint16_t value) { void cpld_read (unsigned int addr, uint16_t *data) { - *data = readw (WEIM_ADDR(addr << 1)); + *data = __raw_readw (WEIM_ADDR(addr << 1)); } @@ -97,7 +97,7 @@ void dump_reg (void) { #define CPLD_NAME "CPLD_device" -int __cpld_init (struct device_node *dp, struct resource *resource) { +int __cpld_init (struct device *dev, struct device_node *dp, struct resource *resource) { uint16_t rev = 0; int err = 0; @@ -134,7 +134,7 @@ int __cpld_init (struct device_node *dp, struct resource *resource) { cpld_d->name = CPLD_NAME; cpld_d->mem_addr_base = resource[0].start; cpld_d->mem_size = resource_size(&resource[0]); - cpld_d->virt = ioremap_cache (cpld_d->mem_addr_base, cpld_d->mem_size); + cpld_d->virt = devm_ioremap (dev, cpld_d->mem_addr_base, cpld_d->mem_size); if (cpld_d->virt == NULL) { CPLD_ERR ("Failed to ioremap seco CPLD region"); err = -EIO; @@ -248,7 +248,7 @@ static int cpld_probe (struct platform_device *pdev) { int error = 0; int registred; - __cpld_init (dp, &res); + __cpld_init (&pdev->dev, dp, &res); registred = clpd_client_register (dp, &pdev->dev); if ( registred ) diff --git a/drivers/seco/pwm_cpld.c b/drivers/seco/pwm_cpld.c index 8d36dd5bb9a34c769418a73375e4f3ec17b21be1..9bdc54bf5a0ed66e5f74a391a589db8eafa82a71 100644 --- a/drivers/seco/pwm_cpld.c +++ b/drivers/seco/pwm_cpld.c @@ -127,8 +127,6 @@ static int cpwm_apply( struct pwm_chip *chip, struct pwm_device *pwm, unsigned long long period_cycles, duty_cycles, prescale; struct cpwm_chip *cpwm = to_cpwm_chip( chip ); struct pwm_state cstate; - unsigned long long clk1; - unsigned long long nclk; uint16_t reg_value; pwm_get_state(pwm, &cstate); @@ -136,18 +134,16 @@ static int cpwm_apply( struct pwm_chip *chip, struct pwm_device *pwm, prescale = 0; do { - clk1 = (MAIN_CLK >> 1); - do_div (clk1, (prescale + 1)); - nclk = state->period * clk1; - do_div (nclk, 1000000000); - nclk--; + period_cycles = (MAIN_CLK >> 1); + do_div (period_cycles, (prescale + 1)); + do_div (period_cycles, state->period); + period_cycles--; prescale++; - } while (nclk & ~((unsigned long long)0xFFFF)); + } while (period_cycles & ~((unsigned long long)0xFFFF)); prescale--; - - period_cycles = nclk; - duty_cycles = nclk * state->duty_cycle; - do_div (duty_cycles, 100); + + duty_cycles = state->duty_cycle * period_cycles; + do_div (duty_cycles, state->period); cpwm_writeb( cpwm->reg_map.PWM_REG_PERIOD, period_cycles & PWM_MASK_PERIOD); cpwm_writeb( cpwm->reg_map.PWM_REG_DUTY, duty_cycles & PWM_MASK_DUTY); @@ -156,7 +152,7 @@ static int cpwm_apply( struct pwm_chip *chip, struct pwm_device *pwm, } else { cpwm_pol_inv( chip ); } -cpwm_pol_inv( chip ); + cpwm_pol_inv( chip ); cpwm_readb( cpwm->reg_map.PWM_REG_PRESCALE, ®_value ); cpwm_writeb( cpwm->reg_map.PWM_REG_PRESCALE, reg_value | (PWM_MASK_PRESCALE & (~PWM_MASK_PRESCALE | prescale))); diff --git a/include/linux/seco_cpld.h b/include/linux/seco_cpld.h index 70a816db895f2b309e626af950508dfeca9a5d25..3d39b1f287cc5e69be4d1fd51adebc4f3f5ca66c 100644 --- a/include/linux/seco_cpld.h +++ b/include/linux/seco_cpld.h @@ -47,7 +47,7 @@ extern void cpld_write (unsigned int addr, uint16_t value); extern int cpld_get_membase (void); -extern int __cpld_init (struct device_node *dp, struct resource *resource); +extern int __cpld_init (struct device *dev, struct device_node *dp, struct resource *resource); extern int cpld_get_revision (void);