|
@@ -96,117 +96,6 @@ void pxa3xx_mfp_write(int mfp, unsigned long val)
|
|
|
spin_unlock_irqrestore(&mfp_spin_lock, flags);
|
|
|
}
|
|
|
|
|
|
-void pxa3xx_mfp_set_afds(int mfp, int af, int ds)
|
|
|
-{
|
|
|
- uint32_t mfpr_off, mfpr_val;
|
|
|
- unsigned long flags;
|
|
|
-
|
|
|
- BUG_ON(mfp >= MFP_PIN_MAX);
|
|
|
-
|
|
|
- spin_lock_irqsave(&mfp_spin_lock, flags);
|
|
|
- mfpr_off = mfp_table[mfp].mfpr_off;
|
|
|
-
|
|
|
- mfpr_val = mfpr_readl(mfpr_off);
|
|
|
- mfpr_val &= ~(MFPR_AF_MASK | MFPR_DRV_MASK);
|
|
|
- mfpr_val |= (((af & 0x7) << MFPR_ALT_OFFSET) |
|
|
|
- ((ds & 0x7) << MFPR_DRV_OFFSET));
|
|
|
-
|
|
|
- mfpr_writel(mfpr_off, mfpr_val);
|
|
|
- mfpr_sync();
|
|
|
-
|
|
|
- spin_unlock_irqrestore(&mfp_spin_lock, flags);
|
|
|
-}
|
|
|
-
|
|
|
-void pxa3xx_mfp_set_rdh(int mfp, int rdh)
|
|
|
-{
|
|
|
- uint32_t mfpr_off, mfpr_val;
|
|
|
- unsigned long flags;
|
|
|
-
|
|
|
- BUG_ON(mfp >= MFP_PIN_MAX);
|
|
|
-
|
|
|
- spin_lock_irqsave(&mfp_spin_lock, flags);
|
|
|
-
|
|
|
- mfpr_off = mfp_table[mfp].mfpr_off;
|
|
|
-
|
|
|
- mfpr_val = mfpr_readl(mfpr_off);
|
|
|
- mfpr_val &= ~MFPR_RDH_MASK;
|
|
|
-
|
|
|
- if (likely(rdh))
|
|
|
- mfpr_val |= (1u << MFPR_SS_OFFSET);
|
|
|
-
|
|
|
- mfpr_writel(mfpr_off, mfpr_val);
|
|
|
- mfpr_sync();
|
|
|
-
|
|
|
- spin_unlock_irqrestore(&mfp_spin_lock, flags);
|
|
|
-}
|
|
|
-
|
|
|
-void pxa3xx_mfp_set_lpm(int mfp, int lpm)
|
|
|
-{
|
|
|
- uint32_t mfpr_off, mfpr_val;
|
|
|
- unsigned long flags;
|
|
|
-
|
|
|
- BUG_ON(mfp >= MFP_PIN_MAX);
|
|
|
-
|
|
|
- spin_lock_irqsave(&mfp_spin_lock, flags);
|
|
|
-
|
|
|
- mfpr_off = mfp_table[mfp].mfpr_off;
|
|
|
- mfpr_val = mfpr_readl(mfpr_off);
|
|
|
- mfpr_val &= ~MFPR_LPM_MASK;
|
|
|
-
|
|
|
- if (lpm & 0x1) mfpr_val |= 1u << MFPR_SON_OFFSET;
|
|
|
- if (lpm & 0x2) mfpr_val |= 1u << MFPR_SD_OFFSET;
|
|
|
- if (lpm & 0x4) mfpr_val |= 1u << MFPR_PU_OFFSET;
|
|
|
- if (lpm & 0x8) mfpr_val |= 1u << MFPR_PD_OFFSET;
|
|
|
- if (lpm &0x10) mfpr_val |= 1u << MFPR_PS_OFFSET;
|
|
|
-
|
|
|
- mfpr_writel(mfpr_off, mfpr_val);
|
|
|
- mfpr_sync();
|
|
|
-
|
|
|
- spin_unlock_irqrestore(&mfp_spin_lock, flags);
|
|
|
-}
|
|
|
-
|
|
|
-void pxa3xx_mfp_set_pull(int mfp, int pull)
|
|
|
-{
|
|
|
- uint32_t mfpr_off, mfpr_val;
|
|
|
- unsigned long flags;
|
|
|
-
|
|
|
- BUG_ON(mfp >= MFP_PIN_MAX);
|
|
|
-
|
|
|
- spin_lock_irqsave(&mfp_spin_lock, flags);
|
|
|
-
|
|
|
- mfpr_off = mfp_table[mfp].mfpr_off;
|
|
|
- mfpr_val = mfpr_readl(mfpr_off);
|
|
|
- mfpr_val &= ~MFPR_PULL_MASK;
|
|
|
- mfpr_val |= ((pull & 0x7u) << MFPR_PD_OFFSET);
|
|
|
-
|
|
|
- mfpr_writel(mfpr_off, mfpr_val);
|
|
|
- mfpr_sync();
|
|
|
-
|
|
|
- spin_unlock_irqrestore(&mfp_spin_lock, flags);
|
|
|
-}
|
|
|
-
|
|
|
-void pxa3xx_mfp_set_edge(int mfp, int edge)
|
|
|
-{
|
|
|
- uint32_t mfpr_off, mfpr_val;
|
|
|
- unsigned long flags;
|
|
|
-
|
|
|
- BUG_ON(mfp >= MFP_PIN_MAX);
|
|
|
-
|
|
|
- spin_lock_irqsave(&mfp_spin_lock, flags);
|
|
|
-
|
|
|
- mfpr_off = mfp_table[mfp].mfpr_off;
|
|
|
- mfpr_val = mfpr_readl(mfpr_off);
|
|
|
-
|
|
|
- mfpr_val &= ~MFPR_EDGE_MASK;
|
|
|
- mfpr_val |= (edge & 0x3u) << MFPR_ERE_OFFSET;
|
|
|
- mfpr_val |= (!edge & 0x1) << MFPR_EC_OFFSET;
|
|
|
-
|
|
|
- mfpr_writel(mfpr_off, mfpr_val);
|
|
|
- mfpr_sync();
|
|
|
-
|
|
|
- spin_unlock_irqrestore(&mfp_spin_lock, flags);
|
|
|
-}
|
|
|
-
|
|
|
void __init pxa3xx_mfp_init_addr(struct pxa3xx_mfp_addr_map *map)
|
|
|
{
|
|
|
struct pxa3xx_mfp_addr_map *p;
|