@@ -107,9 +107,9 @@ static bool rz_mtu3_is_counter_invalid(struct counter_device *counter, int id)
107107 struct rz_mtu3_cnt * const priv = counter_priv (counter );
108108 unsigned long tmdr ;
109109
110- pm_runtime_get_sync (priv -> ch -> dev );
110+ pm_runtime_get_sync (counter -> parent );
111111 tmdr = rz_mtu3_shared_reg_read (priv -> ch , RZ_MTU3_TMDR3 );
112- pm_runtime_put (priv -> ch -> dev );
112+ pm_runtime_put (counter -> parent );
113113
114114 if (id == RZ_MTU3_32_BIT_CH && test_bit (RZ_MTU3_TMDR3_LWA , & tmdr ))
115115 return false;
@@ -165,12 +165,12 @@ static int rz_mtu3_count_read(struct counter_device *counter,
165165 if (ret )
166166 return ret ;
167167
168- pm_runtime_get_sync (ch -> dev );
168+ pm_runtime_get_sync (counter -> parent );
169169 if (count -> id == RZ_MTU3_32_BIT_CH )
170170 * val = rz_mtu3_32bit_ch_read (ch , RZ_MTU3_TCNTLW );
171171 else
172172 * val = rz_mtu3_16bit_ch_read (ch , RZ_MTU3_TCNT );
173- pm_runtime_put (ch -> dev );
173+ pm_runtime_put (counter -> parent );
174174 mutex_unlock (& priv -> lock );
175175
176176 return 0 ;
@@ -187,26 +187,26 @@ static int rz_mtu3_count_write(struct counter_device *counter,
187187 if (ret )
188188 return ret ;
189189
190- pm_runtime_get_sync (ch -> dev );
190+ pm_runtime_get_sync (counter -> parent );
191191 if (count -> id == RZ_MTU3_32_BIT_CH )
192192 rz_mtu3_32bit_ch_write (ch , RZ_MTU3_TCNTLW , val );
193193 else
194194 rz_mtu3_16bit_ch_write (ch , RZ_MTU3_TCNT , val );
195- pm_runtime_put (ch -> dev );
195+ pm_runtime_put (counter -> parent );
196196 mutex_unlock (& priv -> lock );
197197
198198 return 0 ;
199199}
200200
201201static int rz_mtu3_count_function_read_helper (struct rz_mtu3_channel * const ch ,
202- struct rz_mtu3_cnt * const priv ,
202+ struct counter_device * const counter ,
203203 enum counter_function * function )
204204{
205205 u8 timer_mode ;
206206
207- pm_runtime_get_sync (ch -> dev );
207+ pm_runtime_get_sync (counter -> parent );
208208 timer_mode = rz_mtu3_8bit_ch_read (ch , RZ_MTU3_TMDR1 );
209- pm_runtime_put (ch -> dev );
209+ pm_runtime_put (counter -> parent );
210210
211211 switch (timer_mode & RZ_MTU3_TMDR1_PH_CNT_MODE_MASK ) {
212212 case RZ_MTU3_TMDR1_PH_CNT_MODE_1 :
@@ -240,7 +240,7 @@ static int rz_mtu3_count_function_read(struct counter_device *counter,
240240 if (ret )
241241 return ret ;
242242
243- ret = rz_mtu3_count_function_read_helper (ch , priv , function );
243+ ret = rz_mtu3_count_function_read_helper (ch , counter , function );
244244 mutex_unlock (& priv -> lock );
245245
246246 return ret ;
@@ -279,9 +279,9 @@ static int rz_mtu3_count_function_write(struct counter_device *counter,
279279 return - EINVAL ;
280280 }
281281
282- pm_runtime_get_sync (ch -> dev );
282+ pm_runtime_get_sync (counter -> parent );
283283 rz_mtu3_8bit_ch_write (ch , RZ_MTU3_TMDR1 , timer_mode );
284- pm_runtime_put (ch -> dev );
284+ pm_runtime_put (counter -> parent );
285285 mutex_unlock (& priv -> lock );
286286
287287 return 0 ;
@@ -300,9 +300,9 @@ static int rz_mtu3_count_direction_read(struct counter_device *counter,
300300 if (ret )
301301 return ret ;
302302
303- pm_runtime_get_sync (ch -> dev );
303+ pm_runtime_get_sync (counter -> parent );
304304 tsr = rz_mtu3_8bit_ch_read (ch , RZ_MTU3_TSR );
305- pm_runtime_put (ch -> dev );
305+ pm_runtime_put (counter -> parent );
306306
307307 * direction = (tsr & RZ_MTU3_TSR_TCFD ) ?
308308 COUNTER_COUNT_DIRECTION_FORWARD : COUNTER_COUNT_DIRECTION_BACKWARD ;
@@ -377,14 +377,14 @@ static int rz_mtu3_count_ceiling_write(struct counter_device *counter,
377377 return - EINVAL ;
378378 }
379379
380- pm_runtime_get_sync (ch -> dev );
380+ pm_runtime_get_sync (counter -> parent );
381381 if (count -> id == RZ_MTU3_32_BIT_CH )
382382 rz_mtu3_32bit_ch_write (ch , RZ_MTU3_TGRALW , ceiling );
383383 else
384384 rz_mtu3_16bit_ch_write (ch , RZ_MTU3_TGRA , ceiling );
385385
386386 rz_mtu3_8bit_ch_write (ch , RZ_MTU3_TCR , RZ_MTU3_TCR_CCLR_TGRA );
387- pm_runtime_put (ch -> dev );
387+ pm_runtime_put (counter -> parent );
388388 mutex_unlock (& priv -> lock );
389389
390390 return 0 ;
@@ -495,25 +495,28 @@ static int rz_mtu3_count_enable_read(struct counter_device *counter,
495495static int rz_mtu3_count_enable_write (struct counter_device * counter ,
496496 struct counter_count * count , u8 enable )
497497{
498- struct rz_mtu3_channel * const ch = rz_mtu3_get_ch (counter , count -> id );
499498 struct rz_mtu3_cnt * const priv = counter_priv (counter );
500499 int ret = 0 ;
501500
501+ mutex_lock (& priv -> lock );
502+
503+ if (priv -> count_is_enabled [count -> id ] == enable )
504+ goto exit ;
505+
502506 if (enable ) {
503- mutex_lock (& priv -> lock );
504- pm_runtime_get_sync (ch -> dev );
507+ pm_runtime_get_sync (counter -> parent );
505508 ret = rz_mtu3_initialize_counter (counter , count -> id );
506509 if (ret == 0 )
507510 priv -> count_is_enabled [count -> id ] = true;
508- mutex_unlock (& priv -> lock );
509511 } else {
510- mutex_lock (& priv -> lock );
511512 rz_mtu3_terminate_counter (counter , count -> id );
512513 priv -> count_is_enabled [count -> id ] = false;
513- pm_runtime_put (ch -> dev );
514- mutex_unlock (& priv -> lock );
514+ pm_runtime_put (counter -> parent );
515515 }
516516
517+ exit :
518+ mutex_unlock (& priv -> lock );
519+
517520 return ret ;
518521}
519522
@@ -540,9 +543,9 @@ static int rz_mtu3_cascade_counts_enable_get(struct counter_device *counter,
540543 if (ret )
541544 return ret ;
542545
543- pm_runtime_get_sync (priv -> ch -> dev );
546+ pm_runtime_get_sync (counter -> parent );
544547 tmdr = rz_mtu3_shared_reg_read (priv -> ch , RZ_MTU3_TMDR3 );
545- pm_runtime_put (priv -> ch -> dev );
548+ pm_runtime_put (counter -> parent );
546549 * cascade_enable = test_bit (RZ_MTU3_TMDR3_LWA , & tmdr );
547550 mutex_unlock (& priv -> lock );
548551
@@ -559,10 +562,10 @@ static int rz_mtu3_cascade_counts_enable_set(struct counter_device *counter,
559562 if (ret )
560563 return ret ;
561564
562- pm_runtime_get_sync (priv -> ch -> dev );
565+ pm_runtime_get_sync (counter -> parent );
563566 rz_mtu3_shared_reg_update_bit (priv -> ch , RZ_MTU3_TMDR3 ,
564567 RZ_MTU3_TMDR3_LWA , cascade_enable );
565- pm_runtime_put (priv -> ch -> dev );
568+ pm_runtime_put (counter -> parent );
566569 mutex_unlock (& priv -> lock );
567570
568571 return 0 ;
@@ -579,9 +582,9 @@ static int rz_mtu3_ext_input_phase_clock_select_get(struct counter_device *count
579582 if (ret )
580583 return ret ;
581584
582- pm_runtime_get_sync (priv -> ch -> dev );
585+ pm_runtime_get_sync (counter -> parent );
583586 tmdr = rz_mtu3_shared_reg_read (priv -> ch , RZ_MTU3_TMDR3 );
584- pm_runtime_put (priv -> ch -> dev );
587+ pm_runtime_put (counter -> parent );
585588 * ext_input_phase_clock_select = test_bit (RZ_MTU3_TMDR3_PHCKSEL , & tmdr );
586589 mutex_unlock (& priv -> lock );
587590
@@ -598,11 +601,11 @@ static int rz_mtu3_ext_input_phase_clock_select_set(struct counter_device *count
598601 if (ret )
599602 return ret ;
600603
601- pm_runtime_get_sync (priv -> ch -> dev );
604+ pm_runtime_get_sync (counter -> parent );
602605 rz_mtu3_shared_reg_update_bit (priv -> ch , RZ_MTU3_TMDR3 ,
603606 RZ_MTU3_TMDR3_PHCKSEL ,
604607 ext_input_phase_clock_select );
605- pm_runtime_put (priv -> ch -> dev );
608+ pm_runtime_put (counter -> parent );
606609 mutex_unlock (& priv -> lock );
607610
608611 return 0 ;
@@ -640,7 +643,7 @@ static int rz_mtu3_action_read(struct counter_device *counter,
640643 if (ret )
641644 return ret ;
642645
643- ret = rz_mtu3_count_function_read_helper (ch , priv , & function );
646+ ret = rz_mtu3_count_function_read_helper (ch , counter , & function );
644647 if (ret ) {
645648 mutex_unlock (& priv -> lock );
646649 return ret ;
0 commit comments