diff options
author | Sebastian Reichel <sre@kernel.org> | 2016-04-29 19:01:06 -0400 |
---|---|---|
committer | Sebastian Reichel <sre@kernel.org> | 2016-05-02 15:56:12 -0400 |
commit | 0845e1f20af100d1d4ac7cc111a8dfb790f94a16 (patch) | |
tree | 84e6662b049950f265803803880c9b69cdb7c6c3 /drivers/hsi | |
parent | f704e1103e05a65c83b85c66d947e57bc20d6edd (diff) |
HSI: omap_ssi: make sure probe stays available
device can be unbind/rebind, so probe should
stay available.
Acked-by: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Sebastian Reichel <sre@kernel.org>
Diffstat (limited to 'drivers/hsi')
-rw-r--r-- | drivers/hsi/controllers/omap_ssi.c | 17 | ||||
-rw-r--r-- | drivers/hsi/controllers/omap_ssi_port.c | 19 |
2 files changed, 19 insertions, 17 deletions
diff --git a/drivers/hsi/controllers/omap_ssi.c b/drivers/hsi/controllers/omap_ssi.c index 2dd46b219af2..ffb921482e76 100644 --- a/drivers/hsi/controllers/omap_ssi.c +++ b/drivers/hsi/controllers/omap_ssi.c | |||
@@ -140,7 +140,7 @@ static const struct file_operations ssi_gdd_regs_fops = { | |||
140 | .release = single_release, | 140 | .release = single_release, |
141 | }; | 141 | }; |
142 | 142 | ||
143 | static int __init ssi_debug_add_ctrl(struct hsi_controller *ssi) | 143 | static int ssi_debug_add_ctrl(struct hsi_controller *ssi) |
144 | { | 144 | { |
145 | struct omap_ssi_controller *omap_ssi = hsi_controller_drvdata(ssi); | 145 | struct omap_ssi_controller *omap_ssi = hsi_controller_drvdata(ssi); |
146 | struct dentry *dir; | 146 | struct dentry *dir; |
@@ -290,7 +290,7 @@ static unsigned long ssi_get_clk_rate(struct hsi_controller *ssi) | |||
290 | return rate; | 290 | return rate; |
291 | } | 291 | } |
292 | 292 | ||
293 | static int __init ssi_get_iomem(struct platform_device *pd, | 293 | static int ssi_get_iomem(struct platform_device *pd, |
294 | const char *name, void __iomem **pbase, dma_addr_t *phy) | 294 | const char *name, void __iomem **pbase, dma_addr_t *phy) |
295 | { | 295 | { |
296 | struct resource *mem; | 296 | struct resource *mem; |
@@ -310,7 +310,7 @@ static int __init ssi_get_iomem(struct platform_device *pd, | |||
310 | return 0; | 310 | return 0; |
311 | } | 311 | } |
312 | 312 | ||
313 | static int __init ssi_add_controller(struct hsi_controller *ssi, | 313 | static int ssi_add_controller(struct hsi_controller *ssi, |
314 | struct platform_device *pd) | 314 | struct platform_device *pd) |
315 | { | 315 | { |
316 | struct omap_ssi_controller *omap_ssi; | 316 | struct omap_ssi_controller *omap_ssi; |
@@ -386,7 +386,7 @@ out_err: | |||
386 | return err; | 386 | return err; |
387 | } | 387 | } |
388 | 388 | ||
389 | static int __init ssi_hw_init(struct hsi_controller *ssi) | 389 | static int ssi_hw_init(struct hsi_controller *ssi) |
390 | { | 390 | { |
391 | struct omap_ssi_controller *omap_ssi = hsi_controller_drvdata(ssi); | 391 | struct omap_ssi_controller *omap_ssi = hsi_controller_drvdata(ssi); |
392 | unsigned int i; | 392 | unsigned int i; |
@@ -456,7 +456,7 @@ static int ssi_remove_ports(struct device *dev, void *c) | |||
456 | return 0; | 456 | return 0; |
457 | } | 457 | } |
458 | 458 | ||
459 | static int __init ssi_probe(struct platform_device *pd) | 459 | static int ssi_probe(struct platform_device *pd) |
460 | { | 460 | { |
461 | struct platform_device *childpdev; | 461 | struct platform_device *childpdev; |
462 | struct device_node *np = pd->dev.of_node; | 462 | struct device_node *np = pd->dev.of_node; |
@@ -522,7 +522,7 @@ out1: | |||
522 | return err; | 522 | return err; |
523 | } | 523 | } |
524 | 524 | ||
525 | static int __exit ssi_remove(struct platform_device *pd) | 525 | static int ssi_remove(struct platform_device *pd) |
526 | { | 526 | { |
527 | struct hsi_controller *ssi = platform_get_drvdata(pd); | 527 | struct hsi_controller *ssi = platform_get_drvdata(pd); |
528 | 528 | ||
@@ -592,7 +592,8 @@ MODULE_DEVICE_TABLE(of, omap_ssi_of_match); | |||
592 | #endif | 592 | #endif |
593 | 593 | ||
594 | static struct platform_driver ssi_pdriver = { | 594 | static struct platform_driver ssi_pdriver = { |
595 | .remove = __exit_p(ssi_remove), | 595 | .probe = ssi_probe, |
596 | .remove = ssi_remove, | ||
596 | .driver = { | 597 | .driver = { |
597 | .name = "omap_ssi", | 598 | .name = "omap_ssi", |
598 | .pm = DEV_PM_OPS, | 599 | .pm = DEV_PM_OPS, |
@@ -600,7 +601,7 @@ static struct platform_driver ssi_pdriver = { | |||
600 | }, | 601 | }, |
601 | }; | 602 | }; |
602 | 603 | ||
603 | module_platform_driver_probe(ssi_pdriver, ssi_probe); | 604 | module_platform_driver(ssi_pdriver); |
604 | 605 | ||
605 | MODULE_ALIAS("platform:omap_ssi"); | 606 | MODULE_ALIAS("platform:omap_ssi"); |
606 | MODULE_AUTHOR("Carlos Chinea <carlos.chinea@nokia.com>"); | 607 | MODULE_AUTHOR("Carlos Chinea <carlos.chinea@nokia.com>"); |
diff --git a/drivers/hsi/controllers/omap_ssi_port.c b/drivers/hsi/controllers/omap_ssi_port.c index 948bdc7946fb..530095ed39e7 100644 --- a/drivers/hsi/controllers/omap_ssi_port.c +++ b/drivers/hsi/controllers/omap_ssi_port.c | |||
@@ -171,7 +171,7 @@ static int ssi_div_set(void *data, u64 val) | |||
171 | 171 | ||
172 | DEFINE_SIMPLE_ATTRIBUTE(ssi_sst_div_fops, ssi_div_get, ssi_div_set, "%llu\n"); | 172 | DEFINE_SIMPLE_ATTRIBUTE(ssi_sst_div_fops, ssi_div_get, ssi_div_set, "%llu\n"); |
173 | 173 | ||
174 | static int __init ssi_debug_add_port(struct omap_ssi_port *omap_port, | 174 | static int ssi_debug_add_port(struct omap_ssi_port *omap_port, |
175 | struct dentry *dir) | 175 | struct dentry *dir) |
176 | { | 176 | { |
177 | struct hsi_port *port = to_hsi_port(omap_port->dev); | 177 | struct hsi_port *port = to_hsi_port(omap_port->dev); |
@@ -1007,7 +1007,7 @@ static irqreturn_t ssi_wake_isr(int irq __maybe_unused, void *ssi_port) | |||
1007 | return IRQ_HANDLED; | 1007 | return IRQ_HANDLED; |
1008 | } | 1008 | } |
1009 | 1009 | ||
1010 | static int __init ssi_port_irq(struct hsi_port *port, | 1010 | static int ssi_port_irq(struct hsi_port *port, |
1011 | struct platform_device *pd) | 1011 | struct platform_device *pd) |
1012 | { | 1012 | { |
1013 | struct omap_ssi_port *omap_port = hsi_port_drvdata(port); | 1013 | struct omap_ssi_port *omap_port = hsi_port_drvdata(port); |
@@ -1029,7 +1029,7 @@ static int __init ssi_port_irq(struct hsi_port *port, | |||
1029 | return err; | 1029 | return err; |
1030 | } | 1030 | } |
1031 | 1031 | ||
1032 | static int __init ssi_wake_irq(struct hsi_port *port, | 1032 | static int ssi_wake_irq(struct hsi_port *port, |
1033 | struct platform_device *pd) | 1033 | struct platform_device *pd) |
1034 | { | 1034 | { |
1035 | struct omap_ssi_port *omap_port = hsi_port_drvdata(port); | 1035 | struct omap_ssi_port *omap_port = hsi_port_drvdata(port); |
@@ -1060,7 +1060,7 @@ static int __init ssi_wake_irq(struct hsi_port *port, | |||
1060 | return err; | 1060 | return err; |
1061 | } | 1061 | } |
1062 | 1062 | ||
1063 | static void __init ssi_queues_init(struct omap_ssi_port *omap_port) | 1063 | static void ssi_queues_init(struct omap_ssi_port *omap_port) |
1064 | { | 1064 | { |
1065 | unsigned int ch; | 1065 | unsigned int ch; |
1066 | 1066 | ||
@@ -1071,7 +1071,7 @@ static void __init ssi_queues_init(struct omap_ssi_port *omap_port) | |||
1071 | INIT_LIST_HEAD(&omap_port->brkqueue); | 1071 | INIT_LIST_HEAD(&omap_port->brkqueue); |
1072 | } | 1072 | } |
1073 | 1073 | ||
1074 | static int __init ssi_port_get_iomem(struct platform_device *pd, | 1074 | static int ssi_port_get_iomem(struct platform_device *pd, |
1075 | const char *name, void __iomem **pbase, dma_addr_t *phy) | 1075 | const char *name, void __iomem **pbase, dma_addr_t *phy) |
1076 | { | 1076 | { |
1077 | struct hsi_port *port = platform_get_drvdata(pd); | 1077 | struct hsi_port *port = platform_get_drvdata(pd); |
@@ -1104,7 +1104,7 @@ static int __init ssi_port_get_iomem(struct platform_device *pd, | |||
1104 | return 0; | 1104 | return 0; |
1105 | } | 1105 | } |
1106 | 1106 | ||
1107 | static int __init ssi_port_probe(struct platform_device *pd) | 1107 | static int ssi_port_probe(struct platform_device *pd) |
1108 | { | 1108 | { |
1109 | struct device_node *np = pd->dev.of_node; | 1109 | struct device_node *np = pd->dev.of_node; |
1110 | struct hsi_port *port; | 1110 | struct hsi_port *port; |
@@ -1217,7 +1217,7 @@ error: | |||
1217 | return err; | 1217 | return err; |
1218 | } | 1218 | } |
1219 | 1219 | ||
1220 | static int __exit ssi_port_remove(struct platform_device *pd) | 1220 | static int ssi_port_remove(struct platform_device *pd) |
1221 | { | 1221 | { |
1222 | struct hsi_port *port = platform_get_drvdata(pd); | 1222 | struct hsi_port *port = platform_get_drvdata(pd); |
1223 | struct omap_ssi_port *omap_port = hsi_port_drvdata(port); | 1223 | struct omap_ssi_port *omap_port = hsi_port_drvdata(port); |
@@ -1370,7 +1370,8 @@ MODULE_DEVICE_TABLE(of, omap_ssi_port_of_match); | |||
1370 | #endif | 1370 | #endif |
1371 | 1371 | ||
1372 | static struct platform_driver ssi_port_pdriver = { | 1372 | static struct platform_driver ssi_port_pdriver = { |
1373 | .remove = __exit_p(ssi_port_remove), | 1373 | .probe = ssi_port_probe, |
1374 | .remove = ssi_port_remove, | ||
1374 | .driver = { | 1375 | .driver = { |
1375 | .name = "omap_ssi_port", | 1376 | .name = "omap_ssi_port", |
1376 | .of_match_table = omap_ssi_port_of_match, | 1377 | .of_match_table = omap_ssi_port_of_match, |
@@ -1378,7 +1379,7 @@ static struct platform_driver ssi_port_pdriver = { | |||
1378 | }, | 1379 | }, |
1379 | }; | 1380 | }; |
1380 | 1381 | ||
1381 | module_platform_driver_probe(ssi_port_pdriver, ssi_port_probe); | 1382 | module_platform_driver(ssi_port_pdriver); |
1382 | 1383 | ||
1383 | MODULE_ALIAS("platform:omap_ssi_port"); | 1384 | MODULE_ALIAS("platform:omap_ssi_port"); |
1384 | MODULE_AUTHOR("Carlos Chinea <carlos.chinea@nokia.com>"); | 1385 | MODULE_AUTHOR("Carlos Chinea <carlos.chinea@nokia.com>"); |