Re: [PATCH v1 1/2] pinctrl: pinctrl-loongson2: add pinctrl driver support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Yinbo,

thanks for your patch!

On Fri, Oct 21, 2022 at 3:27 AM Yinbo Zhu <zhuyinbo@xxxxxxxxxxx> wrote:

> The loongson2 SoC has a few pins that can be used as GPIOs or take
> multiple other functions. Add a driver for the pinmuxing.
>
> There is currently no support for GPIO pin pull-up and pull-down.
>
> Signed-off-by: zhanghongchen <zhanghongchen@xxxxxxxxxxx>
> Signed-off-by: Yinbo Zhu <zhuyinbo@xxxxxxxxxxx>

(...)

> +static int loongson2_pmx_set_mux(struct pinctrl_dev *pcdev, unsigned int func_num,
> +                             unsigned int group_num)
> +{
> +       struct loongson2_pinctrl *pctrl = pinctrl_dev_get_drvdata(pcdev);
> +       unsigned long reg = (unsigned long)pctrl->reg_base +
> +                               loongson2_pmx_groups[group_num].reg;
> +       unsigned int mux_bit = loongson2_pmx_groups[group_num].bit;
> +       unsigned int val;
> +       unsigned long flags;
> +
> +       raw_spin_lock_irqsave(&pctrl->lock, flags);
> +       val = readl((void *)reg);
> +       if (func_num == 0)
> +               val &= ~(1<<mux_bit);
> +       else
> +               val |= (1<<mux_bit);
> +       writel(val, (void *)reg);
> +       raw_spin_unlock_irqrestore(&pctrl->lock, flags);

Can you explain in the commit message or with a comment in the code
why you have to use a raw spinlock for this?

We usually only use raw spinlocks for things like low level
interrupt handlers...

My guess is that you can replace this with an ordinary spinlock.

Yours,
Linus Walleij



[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux