@@ -38,6 +38,11 @@ enum ipq806x_versions {
38
38
39
39
#define IPQ6000_VERSION BIT(2)
40
40
41
+ enum ipq8074_versions {
42
+ IPQ8074_HAWKEYE_VERSION = 0 ,
43
+ IPQ8074_ACORN_VERSION ,
44
+ };
45
+
41
46
struct qcom_cpufreq_drv ;
42
47
43
48
struct qcom_cpufreq_match_data {
@@ -178,6 +183,16 @@ static int qcom_cpufreq_kryo_name_version(struct device *cpu_dev,
178
183
switch (msm_id ) {
179
184
case QCOM_ID_MSM8996 :
180
185
case QCOM_ID_APQ8096 :
186
+ case QCOM_ID_IPQ5332 :
187
+ case QCOM_ID_IPQ5322 :
188
+ case QCOM_ID_IPQ5312 :
189
+ case QCOM_ID_IPQ5302 :
190
+ case QCOM_ID_IPQ5300 :
191
+ case QCOM_ID_IPQ9514 :
192
+ case QCOM_ID_IPQ9550 :
193
+ case QCOM_ID_IPQ9554 :
194
+ case QCOM_ID_IPQ9570 :
195
+ case QCOM_ID_IPQ9574 :
181
196
drv -> versions = 1 << (unsigned int )(* speedbin );
182
197
break ;
183
198
case QCOM_ID_MSM8996SG :
@@ -338,6 +353,44 @@ static int qcom_cpufreq_ipq6018_name_version(struct device *cpu_dev,
338
353
return 0 ;
339
354
}
340
355
356
+ static int qcom_cpufreq_ipq8074_name_version (struct device * cpu_dev ,
357
+ struct nvmem_cell * speedbin_nvmem ,
358
+ char * * pvs_name ,
359
+ struct qcom_cpufreq_drv * drv )
360
+ {
361
+ u32 msm_id ;
362
+ int ret ;
363
+ * pvs_name = NULL ;
364
+
365
+ ret = qcom_smem_get_soc_id (& msm_id );
366
+ if (ret )
367
+ return ret ;
368
+
369
+ switch (msm_id ) {
370
+ case QCOM_ID_IPQ8070A :
371
+ case QCOM_ID_IPQ8071A :
372
+ case QCOM_ID_IPQ8172 :
373
+ case QCOM_ID_IPQ8173 :
374
+ case QCOM_ID_IPQ8174 :
375
+ drv -> versions = BIT (IPQ8074_ACORN_VERSION );
376
+ break ;
377
+ case QCOM_ID_IPQ8072A :
378
+ case QCOM_ID_IPQ8074A :
379
+ case QCOM_ID_IPQ8076A :
380
+ case QCOM_ID_IPQ8078A :
381
+ drv -> versions = BIT (IPQ8074_HAWKEYE_VERSION );
382
+ break ;
383
+ default :
384
+ dev_err (cpu_dev ,
385
+ "SoC ID %u is not part of IPQ8074 family, limiting to 1.4GHz!\n" ,
386
+ msm_id );
387
+ drv -> versions = BIT (IPQ8074_ACORN_VERSION );
388
+ break ;
389
+ }
390
+
391
+ return 0 ;
392
+ }
393
+
341
394
static const char * generic_genpd_names [] = { "perf" , NULL };
342
395
343
396
static const struct qcom_cpufreq_match_data match_data_kryo = {
@@ -367,6 +420,10 @@ static const struct qcom_cpufreq_match_data match_data_ipq8064 = {
367
420
.get_version = qcom_cpufreq_ipq8064_name_version ,
368
421
};
369
422
423
+ static const struct qcom_cpufreq_match_data match_data_ipq8074 = {
424
+ .get_version = qcom_cpufreq_ipq8074_name_version ,
425
+ };
426
+
370
427
static int qcom_cpufreq_probe (struct platform_device * pdev )
371
428
{
372
429
struct qcom_cpufreq_drv * drv ;
@@ -494,9 +551,12 @@ static const struct of_device_id qcom_cpufreq_match_list[] __initconst = {
494
551
{ .compatible = "qcom,msm8909" , .data = & match_data_msm8909 },
495
552
{ .compatible = "qcom,msm8996" , .data = & match_data_kryo },
496
553
{ .compatible = "qcom,qcs404" , .data = & match_data_qcs404 },
554
+ { .compatible = "qcom,ipq5332" , .data = & match_data_kryo },
497
555
{ .compatible = "qcom,ipq6018" , .data = & match_data_ipq6018 },
498
556
{ .compatible = "qcom,ipq8064" , .data = & match_data_ipq8064 },
557
+ { .compatible = "qcom,ipq8074" , .data = & match_data_ipq8074 },
499
558
{ .compatible = "qcom,apq8064" , .data = & match_data_krait },
559
+ { .compatible = "qcom,ipq9574" , .data = & match_data_kryo },
500
560
{ .compatible = "qcom,msm8974" , .data = & match_data_krait },
501
561
{ .compatible = "qcom,msm8960" , .data = & match_data_krait },
502
562
{},
0 commit comments