Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e499ada8 authored by Magnus Damm's avatar Magnus Damm Committed by Paul Mundt
Browse files

sh: pfc: Unlock register support



Add PFC support for a 32-bit unlock register. Needed to
drive the r8a7779 PFC that comes with a funky PMMR register.

Signed-off-by: default avatarMagnus Damm <damm@opensource.se>
Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
parent f78a26f5
Loading
Loading
Loading
Loading
+10 −12
Original line number Diff line number Diff line
@@ -210,7 +210,7 @@ static void write_config_reg(struct pinmux_info *gpioc,
			     unsigned long field, unsigned long value)
{
	void __iomem *mapped_reg;
	unsigned long mask, pos;
	unsigned long mask, pos, data;

	config_reg_helper(gpioc, crp, field, &mapped_reg, &mask, &pos);

@@ -221,17 +221,15 @@ static void write_config_reg(struct pinmux_info *gpioc,
	mask = ~(mask << pos);
	value = value << pos;

	switch (crp->reg_width) {
	case 8:
		iowrite8((ioread8(mapped_reg) & mask) | value, mapped_reg);
		break;
	case 16:
		iowrite16((ioread16(mapped_reg) & mask) | value, mapped_reg);
		break;
	case 32:
		iowrite32((ioread32(mapped_reg) & mask) | value, mapped_reg);
		break;
	}
	data = gpio_read_raw_reg(mapped_reg, crp->reg_width);
	data &= mask;
	data |= value;

	if (gpioc->unlock_reg)
		gpio_write_raw_reg(pfc_phys_to_virt(gpioc, gpioc->unlock_reg),
				   32, ~data);

	gpio_write_raw_reg(mapped_reg, crp->reg_width, data);
}

static int setup_data_reg(struct pinmux_info *gpioc, unsigned gpio)
+2 −0
Original line number Diff line number Diff line
@@ -116,6 +116,8 @@ struct pinmux_info {
	unsigned int num_resources;
	struct pfc_window *window;

	unsigned long unlock_reg;

	struct gpio_chip chip;
};