@@ -127,6 +127,19 @@ static void pxa168_pll_init(struct pxa168_clk_unit *pxa_unit)
127127 mmp_clk_add (unit , PXA168_CLK_UART_PLL , clk );
128128}
129129
130+ static DEFINE_SPINLOCK (twsi0_lock );
131+ static DEFINE_SPINLOCK (twsi1_lock );
132+ static const char * const twsi_parent_names [] = {"pll1_2_1_10" , "pll1_2_1_5" };
133+
134+ static DEFINE_SPINLOCK (kpc_lock );
135+ static const char * const kpc_parent_names [] = {"clk32" , "clk32_2" , "pll1_24" };
136+
137+ static DEFINE_SPINLOCK (pwm0_lock );
138+ static DEFINE_SPINLOCK (pwm1_lock );
139+ static DEFINE_SPINLOCK (pwm2_lock );
140+ static DEFINE_SPINLOCK (pwm3_lock );
141+ static const char * const pwm_parent_names [] = {"pll1_48" , "clk32" };
142+
130143static DEFINE_SPINLOCK (uart0_lock );
131144static DEFINE_SPINLOCK (uart1_lock );
132145static DEFINE_SPINLOCK (uart2_lock );
@@ -145,6 +158,13 @@ static const char * const timer_parent_names[] = {"pll1_48", "clk32", "pll1_96",
145158static DEFINE_SPINLOCK (reset_lock );
146159
147160static struct mmp_param_mux_clk apbc_mux_clks [] = {
161+ {0 , "twsi0_mux" , twsi_parent_names , ARRAY_SIZE (twsi_parent_names ), CLK_SET_RATE_PARENT , APBC_TWSI0 , 4 , 3 , 0 , & twsi0_lock },
162+ {0 , "twsi1_mux" , twsi_parent_names , ARRAY_SIZE (twsi_parent_names ), CLK_SET_RATE_PARENT , APBC_TWSI1 , 4 , 3 , 0 , & twsi1_lock },
163+ {0 , "kpc_mux" , kpc_parent_names , ARRAY_SIZE (kpc_parent_names ), CLK_SET_RATE_PARENT , APBC_KPC , 4 , 3 , 0 , & kpc_lock },
164+ {0 , "pwm0_mux" , pwm_parent_names , ARRAY_SIZE (pwm_parent_names ), CLK_SET_RATE_PARENT , APBC_PWM0 , 4 , 3 , 0 , & pwm0_lock },
165+ {0 , "pwm1_mux" , pwm_parent_names , ARRAY_SIZE (pwm_parent_names ), CLK_SET_RATE_PARENT , APBC_PWM1 , 4 , 3 , 0 , & pwm1_lock },
166+ {0 , "pwm2_mux" , pwm_parent_names , ARRAY_SIZE (pwm_parent_names ), CLK_SET_RATE_PARENT , APBC_PWM2 , 4 , 3 , 0 , & pwm2_lock },
167+ {0 , "pwm3_mux" , pwm_parent_names , ARRAY_SIZE (pwm_parent_names ), CLK_SET_RATE_PARENT , APBC_PWM3 , 4 , 3 , 0 , & pwm3_lock },
148168 {0 , "uart0_mux" , uart_parent_names , ARRAY_SIZE (uart_parent_names ), CLK_SET_RATE_PARENT , APBC_UART0 , 4 , 3 , 0 , & uart0_lock },
149169 {0 , "uart1_mux" , uart_parent_names , ARRAY_SIZE (uart_parent_names ), CLK_SET_RATE_PARENT , APBC_UART1 , 4 , 3 , 0 , & uart1_lock },
150170 {0 , "uart2_mux" , uart_parent_names , ARRAY_SIZE (uart_parent_names ), CLK_SET_RATE_PARENT , APBC_UART2 , 4 , 3 , 0 , & uart2_lock },
@@ -157,16 +177,15 @@ static struct mmp_param_mux_clk apbc_mux_clks[] = {
157177};
158178
159179static struct mmp_param_gate_clk apbc_gate_clks [] = {
160- {PXA168_CLK_TWSI0 , "twsi0_clk" , "pll1_13_1_5 " , CLK_SET_RATE_PARENT , APBC_TWSI0 , 0x3 , 0x3 , 0x0 , 0 , & reset_lock },
161- {PXA168_CLK_TWSI1 , "twsi1_clk" , "pll1_13_1_5 " , CLK_SET_RATE_PARENT , APBC_TWSI1 , 0x3 , 0x3 , 0x0 , 0 , & reset_lock },
180+ {PXA168_CLK_TWSI0 , "twsi0_clk" , "twsi0_mux " , CLK_SET_RATE_PARENT , APBC_TWSI0 , 0x3 , 0x3 , 0x0 , 0 , & twsi0_lock },
181+ {PXA168_CLK_TWSI1 , "twsi1_clk" , "twsi1_mux " , CLK_SET_RATE_PARENT , APBC_TWSI1 , 0x3 , 0x3 , 0x0 , 0 , & twsi1_lock },
162182 {PXA168_CLK_GPIO , "gpio_clk" , "vctcxo" , CLK_SET_RATE_PARENT , APBC_GPIO , 0x3 , 0x3 , 0x0 , 0 , & reset_lock },
163- {PXA168_CLK_KPC , "kpc_clk" , "clk32 " , CLK_SET_RATE_PARENT , APBC_KPC , 0x3 , 0x3 , 0x0 , MMP_CLK_GATE_NEED_DELAY , NULL },
183+ {PXA168_CLK_KPC , "kpc_clk" , "kpc_mux " , CLK_SET_RATE_PARENT , APBC_KPC , 0x3 , 0x3 , 0x0 , MMP_CLK_GATE_NEED_DELAY , & kpc_lock },
164184 {PXA168_CLK_RTC , "rtc_clk" , "clk32" , CLK_SET_RATE_PARENT , APBC_RTC , 0x83 , 0x83 , 0x0 , MMP_CLK_GATE_NEED_DELAY , NULL },
165- {PXA168_CLK_PWM0 , "pwm0_clk" , "pll1_48" , CLK_SET_RATE_PARENT , APBC_PWM0 , 0x3 , 0x3 , 0x0 , 0 , & reset_lock },
166- {PXA168_CLK_PWM1 , "pwm1_clk" , "pll1_48" , CLK_SET_RATE_PARENT , APBC_PWM1 , 0x3 , 0x3 , 0x0 , 0 , & reset_lock },
167- {PXA168_CLK_PWM2 , "pwm2_clk" , "pll1_48" , CLK_SET_RATE_PARENT , APBC_PWM2 , 0x3 , 0x3 , 0x0 , 0 , & reset_lock },
168- {PXA168_CLK_PWM3 , "pwm3_clk" , "pll1_48" , CLK_SET_RATE_PARENT , APBC_PWM3 , 0x3 , 0x3 , 0x0 , 0 , & reset_lock },
169- /* The gate clocks has mux parent. */
185+ {PXA168_CLK_PWM0 , "pwm0_clk" , "pwm0_mux" , CLK_SET_RATE_PARENT , APBC_PWM0 , 0x3 , 0x3 , 0x0 , 0 , & pwm0_lock },
186+ {PXA168_CLK_PWM1 , "pwm1_clk" , "pwm1_mux" , CLK_SET_RATE_PARENT , APBC_PWM1 , 0x3 , 0x3 , 0x0 , 0 , & pwm1_lock },
187+ {PXA168_CLK_PWM2 , "pwm2_clk" , "pwm2_mux" , CLK_SET_RATE_PARENT , APBC_PWM2 , 0x3 , 0x3 , 0x0 , 0 , & pwm2_lock },
188+ {PXA168_CLK_PWM3 , "pwm3_clk" , "pwm3_mux" , CLK_SET_RATE_PARENT , APBC_PWM3 , 0x3 , 0x3 , 0x0 , 0 , & pwm3_lock },
170189 {PXA168_CLK_UART0 , "uart0_clk" , "uart0_mux" , CLK_SET_RATE_PARENT , APBC_UART0 , 0x3 , 0x3 , 0x0 , 0 , & uart0_lock },
171190 {PXA168_CLK_UART1 , "uart1_clk" , "uart1_mux" , CLK_SET_RATE_PARENT , APBC_UART1 , 0x3 , 0x3 , 0x0 , 0 , & uart1_lock },
172191 {PXA168_CLK_UART2 , "uart2_clk" , "uart2_mux" , CLK_SET_RATE_PARENT , APBC_UART2 , 0x3 , 0x3 , 0x0 , 0 , & uart2_lock },
@@ -190,6 +209,9 @@ static void pxa168_apb_periph_clk_init(struct pxa168_clk_unit *pxa_unit)
190209
191210}
192211
212+ static DEFINE_SPINLOCK (dfc_lock );
213+ static const char * const dfc_parent_names [] = {"pll1_4" , "pll1_8" };
214+
193215static DEFINE_SPINLOCK (sdh0_lock );
194216static DEFINE_SPINLOCK (sdh1_lock );
195217static const char * const sdh_parent_names [] = {"pll1_13" , "pll1_12" , "pll1_8" };
@@ -204,6 +226,7 @@ static const char * const ccic_parent_names[] = {"pll1_4", "pll1_8"};
204226static const char * const ccic_phy_parent_names [] = {"pll1_6" , "pll1_12" };
205227
206228static struct mmp_param_mux_clk apmu_mux_clks [] = {
229+ {0 , "dfc_mux" , dfc_parent_names , ARRAY_SIZE (dfc_parent_names ), CLK_SET_RATE_PARENT , APMU_DFC , 6 , 1 , 0 , & dfc_lock },
207230 {0 , "sdh0_mux" , sdh_parent_names , ARRAY_SIZE (sdh_parent_names ), CLK_SET_RATE_PARENT , APMU_SDH0 , 6 , 2 , 0 , & sdh0_lock },
208231 {0 , "sdh1_mux" , sdh_parent_names , ARRAY_SIZE (sdh_parent_names ), CLK_SET_RATE_PARENT , APMU_SDH1 , 6 , 2 , 0 , & sdh1_lock },
209232 {0 , "disp0_mux" , disp_parent_names , ARRAY_SIZE (disp_parent_names ), CLK_SET_RATE_PARENT , APMU_DISP0 , 6 , 1 , 0 , & disp0_lock },
@@ -216,10 +239,9 @@ static struct mmp_param_div_clk apmu_div_clks[] = {
216239};
217240
218241static struct mmp_param_gate_clk apmu_gate_clks [] = {
219- {PXA168_CLK_DFC , "dfc_clk" , "pll1_4 " , CLK_SET_RATE_PARENT , APMU_DFC , 0x19b , 0x19b , 0x0 , 0 , NULL },
242+ {PXA168_CLK_DFC , "dfc_clk" , "dfc_mux " , CLK_SET_RATE_PARENT , APMU_DFC , 0x19b , 0x19b , 0x0 , 0 , & dfc_lock },
220243 {PXA168_CLK_USB , "usb_clk" , "usb_pll" , 0 , APMU_USB , 0x9 , 0x9 , 0x0 , 0 , & usb_lock },
221244 {PXA168_CLK_SPH , "sph_clk" , "usb_pll" , 0 , APMU_USB , 0x12 , 0x12 , 0x0 , 0 , & usb_lock },
222- /* The gate clocks has mux parent. */
223245 {PXA168_CLK_SDH0 , "sdh0_clk" , "sdh0_mux" , CLK_SET_RATE_PARENT , APMU_SDH0 , 0x1b , 0x1b , 0x0 , 0 , & sdh0_lock },
224246 {PXA168_CLK_SDH1 , "sdh1_clk" , "sdh1_mux" , CLK_SET_RATE_PARENT , APMU_SDH1 , 0x1b , 0x1b , 0x0 , 0 , & sdh1_lock },
225247 {PXA168_CLK_DISP0 , "disp0_clk" , "disp0_mux" , CLK_SET_RATE_PARENT , APMU_DISP0 , 0x1b , 0x1b , 0x0 , 0 , & disp0_lock },
0 commit comments