Commit ceb8d2ac authored by Geert Uytterhoeven's avatar Geert Uytterhoeven
Browse files

pinctrl: renesas: Factor out .pin_to_portcr() address handling



All implementations of the .pin_to_portcr() method implement the same
conversion from Port Control Register offset to virtual address.  Factor
it out into the two callers.
Remove the pfc parameter, as it is no longer used.

Note that the failure handling in r8a7740_pin_to_portcr() is pro forma,
as the function is never called with an invalid pin number.

Signed-off-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/r/a485d4986a17259256988eb14e3a4c2b8d61c303.1640270559.git.geert+renesas@glider.be
parent b67fc1c6
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -2606,9 +2606,9 @@ static const unsigned int r8a73a4_portcr_offsets[] = {
	0x00002000, 0x00003000, 0x00003000,
	0x00002000, 0x00003000, 0x00003000,
};
};


static void __iomem *r8a73a4_pin_to_portcr(struct sh_pfc *pfc, unsigned int pin)
static int r8a73a4_pin_to_portcr(unsigned int pin)
{
{
	return pfc->windows->virt + r8a73a4_portcr_offsets[pin >> 5] + pin;
	return r8a73a4_portcr_offsets[pin >> 5] + pin;
}
}


static const struct sh_pfc_soc_operations r8a73a4_pfc_ops = {
static const struct sh_pfc_soc_operations r8a73a4_pfc_ops = {
+3 −3
Original line number Original line Diff line number Diff line
@@ -3495,7 +3495,7 @@ static const struct r8a7740_portcr_group r8a7740_portcr_offsets[] = {
	{ 83, 0x0000 }, { 114, 0x1000 }, { 209, 0x2000 }, { 211, 0x3000 },
	{ 83, 0x0000 }, { 114, 0x1000 }, { 209, 0x2000 }, { 211, 0x3000 },
};
};


static void __iomem *r8a7740_pin_to_portcr(struct sh_pfc *pfc, unsigned int pin)
static int r8a7740_pin_to_portcr(unsigned int pin)
{
{
	unsigned int i;
	unsigned int i;


@@ -3504,10 +3504,10 @@ static void __iomem *r8a7740_pin_to_portcr(struct sh_pfc *pfc, unsigned int pin)
			&r8a7740_portcr_offsets[i];
			&r8a7740_portcr_offsets[i];


		if (pin <= group->end_pin)
		if (pin <= group->end_pin)
			return pfc->windows->virt + group->offset + pin;
			return group->offset + pin;
	}
	}


	return NULL;
	return -1;
}
}


static const struct sh_pfc_soc_operations r8a7740_pfc_ops = {
static const struct sh_pfc_soc_operations r8a7740_pfc_ops = {
+2 −2
Original line number Original line Diff line number Diff line
@@ -4137,9 +4137,9 @@ static const unsigned int sh73a0_portcr_offsets[] = {
	0x00002000, 0x00002000, 0x00003000, 0x00003000, 0x00002000,
	0x00002000, 0x00002000, 0x00003000, 0x00003000, 0x00002000,
};
};


static void __iomem *sh73a0_pin_to_portcr(struct sh_pfc *pfc, unsigned int pin)
static int sh73a0_pin_to_portcr(unsigned int pin)
{
{
	return pfc->windows->virt + sh73a0_portcr_offsets[pin >> 5] + pin;
	return sh73a0_portcr_offsets[pin >> 5] + pin;
}
}


/* -----------------------------------------------------------------------------
/* -----------------------------------------------------------------------------
+4 −2
Original line number Original line Diff line number Diff line
@@ -919,7 +919,8 @@ void rcar_pinmux_set_bias(struct sh_pfc *pfc, unsigned int pin,


unsigned int rmobile_pinmux_get_bias(struct sh_pfc *pfc, unsigned int pin)
unsigned int rmobile_pinmux_get_bias(struct sh_pfc *pfc, unsigned int pin)
{
{
	void __iomem *reg = pfc->info->ops->pin_to_portcr(pfc, pin);
	void __iomem *reg = pfc->windows->virt +
			    pfc->info->ops->pin_to_portcr(pin);
	u32 value = ioread8(reg) & PORTnCR_PULMD_MASK;
	u32 value = ioread8(reg) & PORTnCR_PULMD_MASK;


	switch (value) {
	switch (value) {
@@ -936,7 +937,8 @@ unsigned int rmobile_pinmux_get_bias(struct sh_pfc *pfc, unsigned int pin)
void rmobile_pinmux_set_bias(struct sh_pfc *pfc, unsigned int pin,
void rmobile_pinmux_set_bias(struct sh_pfc *pfc, unsigned int pin,
			     unsigned int bias)
			     unsigned int bias)
{
{
	void __iomem *reg = pfc->info->ops->pin_to_portcr(pfc, pin);
	void __iomem *reg = pfc->windows->virt +
			    pfc->info->ops->pin_to_portcr(pin);
	u32 value = ioread8(reg) & ~PORTnCR_PULMD_MASK;
	u32 value = ioread8(reg) & ~PORTnCR_PULMD_MASK;


	switch (bias) {
	switch (bias) {
+1 −1
Original line number Original line Diff line number Diff line
@@ -255,7 +255,7 @@ struct sh_pfc_soc_operations {
	void (*set_bias)(struct sh_pfc *pfc, unsigned int pin,
	void (*set_bias)(struct sh_pfc *pfc, unsigned int pin,
			 unsigned int bias);
			 unsigned int bias);
	int (*pin_to_pocctrl)(unsigned int pin, u32 *pocctrl);
	int (*pin_to_pocctrl)(unsigned int pin, u32 *pocctrl);
	void __iomem * (*pin_to_portcr)(struct sh_pfc *pfc, unsigned int pin);
	int (*pin_to_portcr)(unsigned int pin);
};
};


struct sh_pfc_soc_info {
struct sh_pfc_soc_info {