|
@@ -525,12 +525,18 @@ static void pcs_disable(struct pinctrl_dev *pctldev, unsigned fselector,
|
|
|
for (i = 0; i < func->nvals; i++) {
|
|
|
struct pcs_func_vals *vals;
|
|
|
unsigned long flags;
|
|
|
- unsigned val;
|
|
|
+ unsigned val, mask;
|
|
|
|
|
|
vals = &func->vals[i];
|
|
|
raw_spin_lock_irqsave(&pcs->lock, flags);
|
|
|
val = pcs->read(vals->reg);
|
|
|
- val &= ~pcs->fmask;
|
|
|
+
|
|
|
+ if (pcs->bits_per_mux)
|
|
|
+ mask = vals->mask;
|
|
|
+ else
|
|
|
+ mask = pcs->fmask;
|
|
|
+
|
|
|
+ val &= ~mask;
|
|
|
val |= pcs->foff << pcs->fshift;
|
|
|
pcs->write(val, vals->reg);
|
|
|
raw_spin_unlock_irqrestore(&pcs->lock, flags);
|