aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/tegra/tegra_das.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/tegra/tegra_das.c')
-rw-r--r--sound/soc/tegra/tegra_das.c66
1 files changed, 31 insertions, 35 deletions
diff --git a/sound/soc/tegra/tegra_das.c b/sound/soc/tegra/tegra_das.c
index 3b55a44146af..3b3c1ba4d235 100644
--- a/sound/soc/tegra/tegra_das.c
+++ b/sound/soc/tegra/tegra_das.c
@@ -172,11 +172,11 @@ static int __devinit tegra_das_probe(struct platform_device *pdev)
172 if (das) 172 if (das)
173 return -ENODEV; 173 return -ENODEV;
174 174
175 das = kzalloc(sizeof(struct tegra_das), GFP_KERNEL); 175 das = devm_kzalloc(&pdev->dev, sizeof(struct tegra_das), GFP_KERNEL);
176 if (!das) { 176 if (!das) {
177 dev_err(&pdev->dev, "Can't allocate tegra_das\n"); 177 dev_err(&pdev->dev, "Can't allocate tegra_das\n");
178 ret = -ENOMEM; 178 ret = -ENOMEM;
179 goto exit; 179 goto err;
180 } 180 }
181 das->dev = &pdev->dev; 181 das->dev = &pdev->dev;
182 182
@@ -184,22 +184,35 @@ static int __devinit tegra_das_probe(struct platform_device *pdev)
184 if (!res) { 184 if (!res) {
185 dev_err(&pdev->dev, "No memory resource\n"); 185 dev_err(&pdev->dev, "No memory resource\n");
186 ret = -ENODEV; 186 ret = -ENODEV;
187 goto err_free; 187 goto err;
188 } 188 }
189 189
190 region = request_mem_region(res->start, resource_size(res), 190 region = devm_request_mem_region(&pdev->dev, res->start,
191 pdev->name); 191 resource_size(res), pdev->name);
192 if (!region) { 192 if (!region) {
193 dev_err(&pdev->dev, "Memory region already claimed\n"); 193 dev_err(&pdev->dev, "Memory region already claimed\n");
194 ret = -EBUSY; 194 ret = -EBUSY;
195 goto err_free; 195 goto err;
196 } 196 }
197 197
198 das->regs = ioremap(res->start, resource_size(res)); 198 das->regs = devm_ioremap(&pdev->dev, res->start, resource_size(res));
199 if (!das->regs) { 199 if (!das->regs) {
200 dev_err(&pdev->dev, "ioremap failed\n"); 200 dev_err(&pdev->dev, "ioremap failed\n");
201 ret = -ENOMEM; 201 ret = -ENOMEM;
202 goto err_release; 202 goto err;
203 }
204
205 ret = tegra_das_connect_dap_to_dac(TEGRA_DAS_DAP_ID_1,
206 TEGRA_DAS_DAP_SEL_DAC1);
207 if (ret) {
208 dev_err(&pdev->dev, "Can't set up DAS DAP connection\n");
209 goto err;
210 }
211 ret = tegra_das_connect_dac_to_dap(TEGRA_DAS_DAC_ID_1,
212 TEGRA_DAS_DAC_SEL_DAP1);
213 if (ret) {
214 dev_err(&pdev->dev, "Can't set up DAS DAC connection\n");
215 goto err;
203 } 216 }
204 217
205 tegra_das_debug_add(das); 218 tegra_das_debug_add(das);
@@ -208,58 +221,41 @@ static int __devinit tegra_das_probe(struct platform_device *pdev)
208 221
209 return 0; 222 return 0;
210 223
211err_release: 224err:
212 release_mem_region(res->start, resource_size(res));
213err_free:
214 kfree(das);
215 das = NULL; 225 das = NULL;
216exit:
217 return ret; 226 return ret;
218} 227}
219 228
220static int __devexit tegra_das_remove(struct platform_device *pdev) 229static int __devexit tegra_das_remove(struct platform_device *pdev)
221{ 230{
222 struct resource *res;
223
224 if (!das) 231 if (!das)
225 return -ENODEV; 232 return -ENODEV;
226 233
227 platform_set_drvdata(pdev, NULL);
228
229 tegra_das_debug_remove(das); 234 tegra_das_debug_remove(das);
230 235
231 iounmap(das->regs);
232
233 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
234 release_mem_region(res->start, resource_size(res));
235
236 kfree(das);
237 das = NULL; 236 das = NULL;
238 237
239 return 0; 238 return 0;
240} 239}
241 240
241static const struct of_device_id tegra_das_of_match[] __devinitconst = {
242 { .compatible = "nvidia,tegra20-das", },
243 {},
244};
245
242static struct platform_driver tegra_das_driver = { 246static struct platform_driver tegra_das_driver = {
243 .probe = tegra_das_probe, 247 .probe = tegra_das_probe,
244 .remove = __devexit_p(tegra_das_remove), 248 .remove = __devexit_p(tegra_das_remove),
245 .driver = { 249 .driver = {
246 .name = DRV_NAME, 250 .name = DRV_NAME,
251 .owner = THIS_MODULE,
252 .of_match_table = tegra_das_of_match,
247 }, 253 },
248}; 254};
249 255module_platform_driver(tegra_das_driver);
250static int __init tegra_das_modinit(void)
251{
252 return platform_driver_register(&tegra_das_driver);
253}
254module_init(tegra_das_modinit);
255
256static void __exit tegra_das_modexit(void)
257{
258 platform_driver_unregister(&tegra_das_driver);
259}
260module_exit(tegra_das_modexit);
261 256
262MODULE_AUTHOR("Stephen Warren <swarren@nvidia.com>"); 257MODULE_AUTHOR("Stephen Warren <swarren@nvidia.com>");
263MODULE_DESCRIPTION("Tegra DAS driver"); 258MODULE_DESCRIPTION("Tegra DAS driver");
264MODULE_LICENSE("GPL"); 259MODULE_LICENSE("GPL");
265MODULE_ALIAS("platform:" DRV_NAME); 260MODULE_ALIAS("platform:" DRV_NAME);
261MODULE_DEVICE_TABLE(of, tegra_das_of_match);