unsigned long flags;
spin_lock_irqsave(&priv->rmw_lock, flags);
+ if ((clk->idx == JH7110_UART3_CLK_CORE
+ || clk->idx == JH7110_UART4_CLK_CORE
+ || clk->idx == JH7110_UART5_CLK_CORE)
+ && (value != JH7110_CLK_ENABLE))
+ value <<= 8;
value |= readl_relaxed(reg) & ~mask;
writel_relaxed(value, reg);
spin_unlock_irqrestore(&priv->rmw_lock, flags);
struct jh7110_clk *clk = jh7110_clk_from(hw);
u32 div = jh7110_clk_reg_get(clk) & JH7110_CLK_DIV_MASK;
+ if (clk->idx == JH7110_UART3_CLK_CORE
+ || clk->idx == JH7110_UART4_CLK_CORE
+ || clk->idx == JH7110_UART5_CLK_CORE)
+ div = div >> 8;
+
return div ? parent_rate / div : 0;
}
JH7110_GATE(JH7110_UART3_CLK_APB, "u3_dw_uart_clk_apb",
GATE_FLAG_NORMAL, JH7110_APB0),
JH7110_GDIV(JH7110_UART3_CLK_CORE, "u3_dw_uart_clk_core",
- GATE_FLAG_NORMAL, 131071, JH7110_PERH_ROOT),
+ GATE_FLAG_NORMAL, 10, JH7110_PERH_ROOT),
JH7110_GATE(JH7110_UART4_CLK_APB, "u4_dw_uart_clk_apb",
GATE_FLAG_NORMAL, JH7110_APB0),
JH7110_GDIV(JH7110_UART4_CLK_CORE, "u4_dw_uart_clk_core",
- GATE_FLAG_NORMAL, 131071, JH7110_PERH_ROOT),
+ GATE_FLAG_NORMAL, 10, JH7110_PERH_ROOT),
JH7110_GATE(JH7110_UART5_CLK_APB, "u5_dw_uart_clk_apb",
GATE_FLAG_NORMAL, JH7110_APB0),
JH7110_GDIV(JH7110_UART5_CLK_CORE, "u5_dw_uart_clk_core",
- GATE_FLAG_NORMAL, 131071, JH7110_PERH_ROOT),
+ GATE_FLAG_NORMAL, 10, JH7110_PERH_ROOT),
//PWMDAC
JH7110_GATE(JH7110_PWMDAC_CLK_APB, "u0_pwmdac_clk_apb",
GATE_FLAG_NORMAL, JH7110_APB0),