Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 283631
b: refs/heads/master
c: ad4a07f
h: refs/heads/master
i:
  283629: 9b7ffd6
  283627: 373dfd1
  283623: 427df8b
  283615: 114e4c4
v: v3
  • Loading branch information
Magnus Damm authored and Paul Mundt committed Jan 9, 2012
1 parent fa26ab2 commit 7c1a6bc
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 28 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 92554d97c6dcc448afd56f96bbe933998868be74
refs/heads/master: ad4a07ff8da7147b391f1ff0034f313a8b9da9e5
45 changes: 18 additions & 27 deletions trunk/drivers/sh/pfc.c
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,8 @@ static int get_data_reg(struct pinmux_info *gpioc, unsigned gpio,
}

static int get_config_reg(struct pinmux_info *gpioc, pinmux_enum_t enum_id,
struct pinmux_cfg_reg **crp, int *indexp,
struct pinmux_cfg_reg **crp,
int *fieldp, int *valuep,
unsigned long **cntp)
{
struct pinmux_cfg_reg *config_reg;
Expand All @@ -306,7 +307,8 @@ static int get_config_reg(struct pinmux_info *gpioc, pinmux_enum_t enum_id,
for (n = 0; n < (r_width / f_width) * (1 << f_width); n++) {
if (config_reg->enum_ids[n] == enum_id) {
*crp = config_reg;
*indexp = n;
*fieldp = n / (1 << f_width);
*valuep = n % (1 << f_width);
*cntp = &config_reg->cnt[n / (1 << f_width)];
return 0;
}
Expand Down Expand Up @@ -349,36 +351,22 @@ static int get_gpio_enum_id(struct pinmux_info *gpioc, unsigned gpio,

static void write_config_reg(struct pinmux_info *gpioc,
struct pinmux_cfg_reg *crp,
int index)
int field, int value)
{
unsigned long ncomb, pos, value;
void __iomem *mapped_reg;

ncomb = 1 << crp->field_width;
pos = index / ncomb;
value = index % ncomb;

mapped_reg = pfc_phys_to_virt(gpioc, crp->reg);
void __iomem *mapped_reg = pfc_phys_to_virt(gpioc, crp->reg);

gpio_write_reg(mapped_reg, crp->reg_width, crp->field_width,
pos, value, crp->reg);
field, value, crp->reg);
}

static int check_config_reg(struct pinmux_info *gpioc,
struct pinmux_cfg_reg *crp,
int index)
int field, int value)
{
unsigned long ncomb, pos, value;
void __iomem *mapped_reg;

ncomb = 1 << crp->field_width;
pos = index / ncomb;
value = index % ncomb;

mapped_reg = pfc_phys_to_virt(gpioc, crp->reg);
void __iomem *mapped_reg = pfc_phys_to_virt(gpioc, crp->reg);

if (gpio_read_reg(mapped_reg, crp->reg_width,
crp->field_width, pos, crp->reg) == value)
crp->field_width, field, crp->reg) == value)
return 0;

return -1;
Expand All @@ -392,7 +380,7 @@ static int pinmux_config_gpio(struct pinmux_info *gpioc, unsigned gpio,
struct pinmux_cfg_reg *cr = NULL;
pinmux_enum_t enum_id;
struct pinmux_range *range;
int in_range, pos, index;
int in_range, pos, field, value;
unsigned long *cntp;

switch (pinmux_type) {
Expand Down Expand Up @@ -423,7 +411,8 @@ static int pinmux_config_gpio(struct pinmux_info *gpioc, unsigned gpio,

pos = 0;
enum_id = 0;
index = 0;
field = 0;
value = 0;
while (1) {
pos = get_gpio_enum_id(gpioc, gpio, pos, &enum_id);
if (pos <= 0)
Expand Down Expand Up @@ -470,17 +459,19 @@ static int pinmux_config_gpio(struct pinmux_info *gpioc, unsigned gpio,
if (!in_range)
continue;

if (get_config_reg(gpioc, enum_id, &cr, &index, &cntp) != 0)
if (get_config_reg(gpioc, enum_id, &cr,
&field, &value, &cntp) != 0)
goto out_err;

switch (cfg_mode) {
case GPIO_CFG_DRYRUN:
if (!*cntp || !check_config_reg(gpioc, cr, index))
if (!*cntp || !check_config_reg(gpioc, cr,
field, value))
continue;
break;

case GPIO_CFG_REQ:
write_config_reg(gpioc, cr, index);
write_config_reg(gpioc, cr, field, value);
*cntp = *cntp + 1;
break;

Expand Down

0 comments on commit 7c1a6bc

Please sign in to comment.