在 2022/10/21 下午5:45, Linus Walleij 写道:
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.
I was refer other platform, eg. pinctrl-amd.c, if the ordinary spinlock
was more appropriate I will use the ordinary spinlock.
TKs
Yinbo.
Yours,
Linus Walleij