diff options
author | Ilia Lin <ilia.lin@gmail.com> | 2018-06-17 16:01:46 -0400 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2018-06-19 04:35:59 -0400 |
commit | 5ad7346b4ae2d59cfee106ec8e40ee2561476d47 (patch) | |
tree | 25ad61d0c10137e267fc643199f4d578365b6bb0 | |
parent | ee3dbcf963c17775417d2fdf74e60f0c1b563dda (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.c | 22 |
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 | ||
45 | struct platform_device *cpufreq_dt_pdev, *kryo_cpufreq_pdev; | ||
46 | |||
45 | static enum _msm8996_version __init qcom_cpufreq_kryo_get_msm_id(void) | 47 | static 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) | |||
74 | static int qcom_cpufreq_kryo_probe(struct platform_device *pdev) | 76 | static 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 | ||
169 | static int qcom_cpufreq_kryo_remove(struct platform_device *pdev) | ||
170 | { | ||
171 | platform_device_unregister(cpufreq_dt_pdev); | ||
172 | return 0; | ||
173 | } | ||
174 | |||
168 | static struct platform_driver qcom_cpufreq_kryo_driver = { | 175 | static 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 | } |
212 | module_init(qcom_cpufreq_kryo_init); | 221 | module_init(qcom_cpufreq_kryo_init); |
213 | 222 | ||
223 | static void __init qcom_cpufreq_kryo_exit(void) | ||
224 | { | ||
225 | platform_device_unregister(kryo_cpufreq_pdev); | ||
226 | platform_driver_unregister(&qcom_cpufreq_kryo_driver); | ||
227 | } | ||
228 | module_exit(qcom_cpufreq_kryo_exit); | ||
229 | |||
214 | MODULE_DESCRIPTION("Qualcomm Technologies, Inc. Kryo CPUfreq driver"); | 230 | MODULE_DESCRIPTION("Qualcomm Technologies, Inc. Kryo CPUfreq driver"); |
215 | MODULE_LICENSE("GPL v2"); | 231 | MODULE_LICENSE("GPL v2"); |