static int pinmux_set_lock(enum pmux_pingrp pin, enum pmux_pin_lock lock) { struct pmux_tri_ctlr *pmt = (struct pmux_tri_ctlr *)NV_PA_APB_MISC_BASE; u32 *pin_lock = &pmt->pmt_ctl[pin]; u32 reg; /* Error check on pin and lock */ assert(pmux_pingrp_isvalid(pin)); assert(pmux_pin_lock_isvalid(lock)); if (lock == PMUX_PIN_LOCK_DEFAULT) return 0; reg = readl(pin_lock); reg &= ~(0x1 << PMUX_LOCK_SHIFT); if (lock == PMUX_PIN_LOCK_ENABLE) reg |= (0x1 << PMUX_LOCK_SHIFT); else { /* lock == DISABLE, which isn't possible */ printf("%s: Warning: lock == %d, DISABLE is not allowed!\n", __func__, lock); } writel(reg, pin_lock); return 0; }
static int pinmux_set_lock(enum pmux_pingrp pin, enum pmux_pin_lock lock) { struct pmux_tri_ctlr *pmt = (struct pmux_tri_ctlr *)NV_PA_APB_MISC_BASE; u32 *pin_lock = &pmt->pmt_ctl[pin]; u32 reg; /* Error check on pin and lock */ assert(pmux_pingrp_isvalid(pin)); assert(pmux_pin_lock_isvalid(lock)); if (lock == PMUX_PIN_LOCK_DEFAULT) return 0; reg = readl(pin_lock); reg &= ~(0x1 << PMUX_LOCK_SHIFT); if (lock == PMUX_PIN_LOCK_ENABLE) reg |= (0x1 << PMUX_LOCK_SHIFT); writel(reg, pin_lock); return 0; }