Skip to content
Snippets Groups Projects
Commit 13493f42 authored by Davide Cardillo's avatar Davide Cardillo
Browse files

[i.MX6][CPLD][driver/seco] Add driver v2.0 for SECO CPLD LPC/GPIO

parent bc336972
No related branches found
No related tags found
No related merge requests found
......@@ -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 )
......
......@@ -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, &reg_value );
cpwm_writeb( cpwm->reg_map.PWM_REG_PRESCALE, reg_value | (PWM_MASK_PRESCALE & (~PWM_MASK_PRESCALE | prescale)));
......
......@@ -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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment