@@ -123,7 +123,7 @@ void devfreq_get_freq_range(struct devfreq *devfreq,
123
123
unsigned long * min_freq ,
124
124
unsigned long * max_freq )
125
125
{
126
- unsigned long * freq_table = devfreq -> profile -> freq_table ;
126
+ unsigned long * freq_table = devfreq -> freq_table ;
127
127
s32 qos_min_freq , qos_max_freq ;
128
128
129
129
lockdep_assert_held (& devfreq -> lock );
@@ -133,11 +133,11 @@ void devfreq_get_freq_range(struct devfreq *devfreq,
133
133
* The devfreq drivers can initialize this in either ascending or
134
134
* descending order and devfreq core supports both.
135
135
*/
136
- if (freq_table [0 ] < freq_table [devfreq -> profile -> max_state - 1 ]) {
136
+ if (freq_table [0 ] < freq_table [devfreq -> max_state - 1 ]) {
137
137
* min_freq = freq_table [0 ];
138
- * max_freq = freq_table [devfreq -> profile -> max_state - 1 ];
138
+ * max_freq = freq_table [devfreq -> max_state - 1 ];
139
139
} else {
140
- * min_freq = freq_table [devfreq -> profile -> max_state - 1 ];
140
+ * min_freq = freq_table [devfreq -> max_state - 1 ];
141
141
* max_freq = freq_table [0 ];
142
142
}
143
143
@@ -169,16 +169,15 @@ static int devfreq_get_freq_level(struct devfreq *devfreq, unsigned long freq)
169
169
{
170
170
int lev ;
171
171
172
- for (lev = 0 ; lev < devfreq -> profile -> max_state ; lev ++ )
173
- if (freq == devfreq -> profile -> freq_table [lev ])
172
+ for (lev = 0 ; lev < devfreq -> max_state ; lev ++ )
173
+ if (freq == devfreq -> freq_table [lev ])
174
174
return lev ;
175
175
176
176
return - EINVAL ;
177
177
}
178
178
179
179
static int set_freq_table (struct devfreq * devfreq )
180
180
{
181
- struct devfreq_dev_profile * profile = devfreq -> profile ;
182
181
struct dev_pm_opp * opp ;
183
182
unsigned long freq ;
184
183
int i , count ;
@@ -188,25 +187,22 @@ static int set_freq_table(struct devfreq *devfreq)
188
187
if (count <= 0 )
189
188
return - EINVAL ;
190
189
191
- profile -> max_state = count ;
192
- profile -> freq_table = devm_kcalloc (devfreq -> dev .parent ,
193
- profile -> max_state ,
194
- sizeof (* profile -> freq_table ),
195
- GFP_KERNEL );
196
- if (!profile -> freq_table ) {
197
- profile -> max_state = 0 ;
190
+ devfreq -> max_state = count ;
191
+ devfreq -> freq_table = devm_kcalloc (devfreq -> dev .parent ,
192
+ devfreq -> max_state ,
193
+ sizeof (* devfreq -> freq_table ),
194
+ GFP_KERNEL );
195
+ if (!devfreq -> freq_table )
198
196
return - ENOMEM ;
199
- }
200
197
201
- for (i = 0 , freq = 0 ; i < profile -> max_state ; i ++ , freq ++ ) {
198
+ for (i = 0 , freq = 0 ; i < devfreq -> max_state ; i ++ , freq ++ ) {
202
199
opp = dev_pm_opp_find_freq_ceil (devfreq -> dev .parent , & freq );
203
200
if (IS_ERR (opp )) {
204
- devm_kfree (devfreq -> dev .parent , profile -> freq_table );
205
- profile -> max_state = 0 ;
201
+ devm_kfree (devfreq -> dev .parent , devfreq -> freq_table );
206
202
return PTR_ERR (opp );
207
203
}
208
204
dev_pm_opp_put (opp );
209
- profile -> freq_table [i ] = freq ;
205
+ devfreq -> freq_table [i ] = freq ;
210
206
}
211
207
212
208
return 0 ;
@@ -246,7 +242,7 @@ int devfreq_update_status(struct devfreq *devfreq, unsigned long freq)
246
242
247
243
if (lev != prev_lev ) {
248
244
devfreq -> stats .trans_table [
249
- (prev_lev * devfreq -> profile -> max_state ) + lev ]++ ;
245
+ (prev_lev * devfreq -> max_state ) + lev ]++ ;
250
246
devfreq -> stats .total_trans ++ ;
251
247
}
252
248
@@ -835,6 +831,9 @@ struct devfreq *devfreq_add_device(struct device *dev,
835
831
if (err < 0 )
836
832
goto err_dev ;
837
833
mutex_lock (& devfreq -> lock );
834
+ } else {
835
+ devfreq -> freq_table = devfreq -> profile -> freq_table ;
836
+ devfreq -> max_state = devfreq -> profile -> max_state ;
838
837
}
839
838
840
839
devfreq -> scaling_min_freq = find_available_min_freq (devfreq );
@@ -870,8 +869,8 @@ struct devfreq *devfreq_add_device(struct device *dev,
870
869
871
870
devfreq -> stats .trans_table = devm_kzalloc (& devfreq -> dev ,
872
871
array3_size (sizeof (unsigned int ),
873
- devfreq -> profile -> max_state ,
874
- devfreq -> profile -> max_state ),
872
+ devfreq -> max_state ,
873
+ devfreq -> max_state ),
875
874
GFP_KERNEL );
876
875
if (!devfreq -> stats .trans_table ) {
877
876
mutex_unlock (& devfreq -> lock );
@@ -880,7 +879,7 @@ struct devfreq *devfreq_add_device(struct device *dev,
880
879
}
881
880
882
881
devfreq -> stats .time_in_state = devm_kcalloc (& devfreq -> dev ,
883
- devfreq -> profile -> max_state ,
882
+ devfreq -> max_state ,
884
883
sizeof (* devfreq -> stats .time_in_state ),
885
884
GFP_KERNEL );
886
885
if (!devfreq -> stats .time_in_state ) {
@@ -1666,9 +1665,9 @@ static ssize_t available_frequencies_show(struct device *d,
1666
1665
1667
1666
mutex_lock (& df -> lock );
1668
1667
1669
- for (i = 0 ; i < df -> profile -> max_state ; i ++ )
1668
+ for (i = 0 ; i < df -> max_state ; i ++ )
1670
1669
count += scnprintf (& buf [count ], (PAGE_SIZE - count - 2 ),
1671
- "%lu " , df -> profile -> freq_table [i ]);
1670
+ "%lu " , df -> freq_table [i ]);
1672
1671
1673
1672
mutex_unlock (& df -> lock );
1674
1673
/* Truncate the trailing space */
@@ -1691,7 +1690,7 @@ static ssize_t trans_stat_show(struct device *dev,
1691
1690
1692
1691
if (!df -> profile )
1693
1692
return - EINVAL ;
1694
- max_state = df -> profile -> max_state ;
1693
+ max_state = df -> max_state ;
1695
1694
1696
1695
if (max_state == 0 )
1697
1696
return sprintf (buf , "Not Supported.\n" );
@@ -1708,19 +1707,17 @@ static ssize_t trans_stat_show(struct device *dev,
1708
1707
len += sprintf (buf + len , " :" );
1709
1708
for (i = 0 ; i < max_state ; i ++ )
1710
1709
len += sprintf (buf + len , "%10lu" ,
1711
- df -> profile -> freq_table [i ]);
1710
+ df -> freq_table [i ]);
1712
1711
1713
1712
len += sprintf (buf + len , " time(ms)\n" );
1714
1713
1715
1714
for (i = 0 ; i < max_state ; i ++ ) {
1716
- if (df -> profile -> freq_table [i ]
1717
- == df -> previous_freq ) {
1715
+ if (df -> freq_table [i ] == df -> previous_freq )
1718
1716
len += sprintf (buf + len , "*" );
1719
- } else {
1717
+ else
1720
1718
len += sprintf (buf + len , " " );
1721
- }
1722
- len += sprintf (buf + len , "%10lu:" ,
1723
- df -> profile -> freq_table [i ]);
1719
+
1720
+ len += sprintf (buf + len , "%10lu:" , df -> freq_table [i ]);
1724
1721
for (j = 0 ; j < max_state ; j ++ )
1725
1722
len += sprintf (buf + len , "%10u" ,
1726
1723
df -> stats .trans_table [(i * max_state ) + j ]);
@@ -1744,19 +1741,19 @@ static ssize_t trans_stat_store(struct device *dev,
1744
1741
if (!df -> profile )
1745
1742
return - EINVAL ;
1746
1743
1747
- if (df -> profile -> max_state == 0 )
1744
+ if (df -> max_state == 0 )
1748
1745
return count ;
1749
1746
1750
1747
err = kstrtoint (buf , 10 , & value );
1751
1748
if (err || value != 0 )
1752
1749
return - EINVAL ;
1753
1750
1754
1751
mutex_lock (& df -> lock );
1755
- memset (df -> stats .time_in_state , 0 , (df -> profile -> max_state *
1752
+ memset (df -> stats .time_in_state , 0 , (df -> max_state *
1756
1753
sizeof (* df -> stats .time_in_state )));
1757
1754
memset (df -> stats .trans_table , 0 , array3_size (sizeof (unsigned int ),
1758
- df -> profile -> max_state ,
1759
- df -> profile -> max_state ));
1755
+ df -> max_state ,
1756
+ df -> max_state ));
1760
1757
df -> stats .total_trans = 0 ;
1761
1758
df -> stats .last_update = get_jiffies_64 ();
1762
1759
mutex_unlock (& df -> lock );
0 commit comments