@@ -38,6 +38,11 @@ enum ipq806x_versions {
3838
3939#define IPQ6000_VERSION BIT(2)
4040
41+ enum ipq8074_versions {
42+ IPQ8074_HAWKEYE_VERSION = 0 ,
43+ IPQ8074_ACORN_VERSION ,
44+ };
45+
4146struct qcom_cpufreq_drv ;
4247
4348struct qcom_cpufreq_match_data {
@@ -178,6 +183,16 @@ static int qcom_cpufreq_kryo_name_version(struct device *cpu_dev,
178183 switch (msm_id ) {
179184 case QCOM_ID_MSM8996 :
180185 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 :
181196 drv -> versions = 1 << (unsigned int )(* speedbin );
182197 break ;
183198 case QCOM_ID_MSM8996SG :
@@ -338,6 +353,44 @@ static int qcom_cpufreq_ipq6018_name_version(struct device *cpu_dev,
338353 return 0 ;
339354}
340355
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+
341394static const char * generic_genpd_names [] = { "perf" , NULL };
342395
343396static const struct qcom_cpufreq_match_data match_data_kryo = {
@@ -367,6 +420,10 @@ static const struct qcom_cpufreq_match_data match_data_ipq8064 = {
367420 .get_version = qcom_cpufreq_ipq8064_name_version ,
368421};
369422
423+ static const struct qcom_cpufreq_match_data match_data_ipq8074 = {
424+ .get_version = qcom_cpufreq_ipq8074_name_version ,
425+ };
426+
370427static int qcom_cpufreq_probe (struct platform_device * pdev )
371428{
372429 struct qcom_cpufreq_drv * drv ;
@@ -494,9 +551,12 @@ static const struct of_device_id qcom_cpufreq_match_list[] __initconst = {
494551 { .compatible = "qcom,msm8909" , .data = & match_data_msm8909 },
495552 { .compatible = "qcom,msm8996" , .data = & match_data_kryo },
496553 { .compatible = "qcom,qcs404" , .data = & match_data_qcs404 },
554+ { .compatible = "qcom,ipq5332" , .data = & match_data_kryo },
497555 { .compatible = "qcom,ipq6018" , .data = & match_data_ipq6018 },
498556 { .compatible = "qcom,ipq8064" , .data = & match_data_ipq8064 },
557+ { .compatible = "qcom,ipq8074" , .data = & match_data_ipq8074 },
499558 { .compatible = "qcom,apq8064" , .data = & match_data_krait },
559+ { .compatible = "qcom,ipq9574" , .data = & match_data_kryo },
500560 { .compatible = "qcom,msm8974" , .data = & match_data_krait },
501561 { .compatible = "qcom,msm8960" , .data = & match_data_krait },
502562 {},
0 commit comments