aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIlia Lin <ilia.lin@gmail.com>2018-06-17 16:01:46 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2018-06-19 04:35:59 -0400
commit5ad7346b4ae2d59cfee106ec8e40ee2561476d47 (patch)
tree25ad61d0c10137e267fc643199f4d578365b6bb0
parentee3dbcf963c17775417d2fdf74e60f0c1b563dda (diff)
cpufreq: kryo: Add module remove and exit
Add device remove and module exit code to make the driver functioning as a loadable module. Fixes: ac28927659be (cpufreq: kryo: allow building as a loadable module) Signed-off-by: Ilia Lin <ilia.lin@gmail.com> Acked-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-rw-r--r--drivers/cpufreq/qcom-cpufreq-kryo.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/drivers/cpufreq/qcom-cpufreq-kryo.c b/drivers/cpufreq/qcom-cpufreq-kryo.c
index 74b9b93d511b..01bddacf5c3b 100644
--- a/drivers/cpufreq/qcom-cpufreq-kryo.c
+++ b/drivers/cpufreq/qcom-cpufreq-kryo.c
@@ -42,6 +42,8 @@ enum _msm8996_version {
42 NUM_OF_MSM8996_VERSIONS, 42 NUM_OF_MSM8996_VERSIONS,
43}; 43};
44 44
45struct platform_device *cpufreq_dt_pdev, *kryo_cpufreq_pdev;
46
45static enum _msm8996_version __init qcom_cpufreq_kryo_get_msm_id(void) 47static enum _msm8996_version __init qcom_cpufreq_kryo_get_msm_id(void)
46{ 48{
47 size_t len; 49 size_t len;
@@ -74,7 +76,6 @@ static enum _msm8996_version __init qcom_cpufreq_kryo_get_msm_id(void)
74static int qcom_cpufreq_kryo_probe(struct platform_device *pdev) 76static int qcom_cpufreq_kryo_probe(struct platform_device *pdev)
75{ 77{
76 struct opp_table *opp_tables[NR_CPUS] = {0}; 78 struct opp_table *opp_tables[NR_CPUS] = {0};
77 struct platform_device *cpufreq_dt_pdev;
78 enum _msm8996_version msm8996_version; 79 enum _msm8996_version msm8996_version;
79 struct nvmem_cell *speedbin_nvmem; 80 struct nvmem_cell *speedbin_nvmem;
80 struct device_node *np; 81 struct device_node *np;
@@ -165,8 +166,15 @@ free_opp:
165 return ret; 166 return ret;
166} 167}
167 168
169static int qcom_cpufreq_kryo_remove(struct platform_device *pdev)
170{
171 platform_device_unregister(cpufreq_dt_pdev);
172 return 0;
173}
174
168static struct platform_driver qcom_cpufreq_kryo_driver = { 175static struct platform_driver qcom_cpufreq_kryo_driver = {
169 .probe = qcom_cpufreq_kryo_probe, 176 .probe = qcom_cpufreq_kryo_probe,
177 .remove = qcom_cpufreq_kryo_remove,
170 .driver = { 178 .driver = {
171 .name = "qcom-cpufreq-kryo", 179 .name = "qcom-cpufreq-kryo",
172 }, 180 },
@@ -201,8 +209,9 @@ static int __init qcom_cpufreq_kryo_init(void)
201 if (unlikely(ret < 0)) 209 if (unlikely(ret < 0))
202 return ret; 210 return ret;
203 211
204 ret = PTR_ERR_OR_ZERO(platform_device_register_simple( 212 kryo_cpufreq_pdev = platform_device_register_simple(
205 "qcom-cpufreq-kryo", -1, NULL, 0)); 213 "qcom-cpufreq-kryo", -1, NULL, 0);
214 ret = PTR_ERR_OR_ZERO(kryo_cpufreq_pdev);
206 if (0 == ret) 215 if (0 == ret)
207 return 0; 216 return 0;
208 217
@@ -211,5 +220,12 @@ static int __init qcom_cpufreq_kryo_init(void)
211} 220}
212module_init(qcom_cpufreq_kryo_init); 221module_init(qcom_cpufreq_kryo_init);
213 222
223static void __init qcom_cpufreq_kryo_exit(void)
224{
225 platform_device_unregister(kryo_cpufreq_pdev);
226 platform_driver_unregister(&qcom_cpufreq_kryo_driver);
227}
228module_exit(qcom_cpufreq_kryo_exit);
229
214MODULE_DESCRIPTION("Qualcomm Technologies, Inc. Kryo CPUfreq driver"); 230MODULE_DESCRIPTION("Qualcomm Technologies, Inc. Kryo CPUfreq driver");
215MODULE_LICENSE("GPL v2"); 231MODULE_LICENSE("GPL v2");