Hi Simon,
On Fri, Sep 9, 2016 at 5:26 PM, Simon Horman <[email protected]> wrote:
>> > + /* GP6_16-23 -> bits 31-24 of pocctrl
>> > + * GP6_06 -> bit 23 of pocctrl
>> > + * GP6_00-05 -> bits 22-17 of pocctrl
>> > + * GP6_07 -> bit 16 of pocctrl
>> > + * GP6_14 -> bit 15 of pocctrl
>> > + * GP6_08-13 -> bits 14-09 of pocctrl
>> > + * GP6_15 -> bit 08 of pocctrl
>> > + */
>> > + if (pin == RCAR_GP_PIN(6, 6) || pin == RCAR_GP_PIN(6, 14))
>> > + return 31 - 2 - (pin & 0x1f);
>> > + else if (pin == RCAR_GP_PIN(6, 7) || pin == RCAR_GP_PIN(6, 15))
>> > + return 31 - 8 - (pin & 0x1f);
>> > + else if (pin < RCAR_GP_PIN(6, 14))
>> > + return 31 - 9 - (pin & 0x1f);
>> > + else
>> > + return 31 + 16 - (pin & 0x1f);
>>
>> While your code is correct, I think it's easier for the casual reader to use
>> a plain switch () statement, and let the optimizer handle the rest.
>
> Like this? If so I don't particularly mind but it doesn't seem clearer to
> me.
>
> +static int r8a7794_pin_to_pocctrl(struct sh_pfc *pfc, unsigned int pin, u32
> *pocctrl)
> +{
> + *pocctrl = 0xe606006c;
> +
> + switch (pin) {
> + case RCAR_GP_PIN(6, 0):
> + return 22;
> + case RCAR_GP_PIN(6, 1):
> + return 21;
Right, a full list of cases indeed doesn't look that much better.
Note that you can use "switch (pin & 0x1f)", and have ranges in case
statements:
switch (pin & 0x1f) {
case 6: return 23:
case 7: return 16;
case 14: return 15;
case 15: return 8;
case 0...5:
case 7...13:
return 22 - (pin & 0x1f);
case 16..23:
return 47 - (pin & 0x1f);
}
Does that look better?
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds