aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Schmidt <stefan@osg.samsung.com>2018-01-22 16:18:06 +0100
committerStefan Schmidt <stefan@osg.samsung.com>2018-02-15 14:47:45 +0100
commitcc730c072d2c7ceb5b4ff0673efc6712397ee523 (patch)
tree2cbe4a670d6d1e6bc600013e47c69a248abe75ae
parentd76520273d8a6b4f61d3cd1d9e59b3342b068cde (diff)
downloadlinux-mcp2210-cc730c072d2c7ceb5b4ff0673efc6712397ee523.tar.gz
WPI: refactor some spi code
-rw-r--r--drivers/spi/mcp2210.c86
1 files changed, 32 insertions, 54 deletions
diff --git a/drivers/spi/mcp2210.c b/drivers/spi/mcp2210.c
index 089fef5378fb28..7e0fc2bf97006b 100644
--- a/drivers/spi/mcp2210.c
+++ b/drivers/spi/mcp2210.c
@@ -284,53 +284,6 @@ static struct spi_board_info demo_spi_devices[] = {
}
};
-int mcp2210_spi_probe(struct mcp2210_device *dev) {
- int ret;
- struct spi_master *master;
- struct mcp2210_spi *ms;
-
- ret = -ENOMEM;
- master = spi_alloc_master(&dev->hid->dev, sizeof *ms);
- if (!master)
- goto out_free;
-
- master->bus_num = -1;
- master->num_chipselect = 4;
- master->setup = mcp2210_spi_setup;
- master->transfer = mcp2210_spi_transfer;
- master->cleanup = mcp2210_spi_cleanup;
- master->mode_bits = SPI_CPOL | SPI_CPHA;
-
- ms = spi_master_get_devdata(master);
- ms->dev = dev;
- ms->master = master;
- dev->spi_data = ms;
-
- ret = spi_register_master(master);
-
- demo_spi_devices[0].bus_num = master->bus_num;
- printk("mcp2210 spi master registered bus number %d\n", demo_spi_devices[0].bus_num);
-
- spi_new_device(master, demo_spi_devices);
-
- if (ret)
- goto out_free;
-
- return 0;
-
-out_free:
- spi_master_put(master);
- return ret;
-}
-
-void mcp2210_spi_remove(struct mcp2210_device *dev)
-{
- struct mcp2210_spi *ms = dev->spi_data;
- struct spi_master *master = ms->master;
-
- spi_unregister_master(master);
-}
-
static void mcp2210_output_command_atomic(struct mcp2210_device *dev);
int next_mcp2210_info_command(void *data, u8 *request) {
@@ -535,6 +488,8 @@ static int mcp2210_probe(struct hid_device *hdev,
int ret;
struct mcp2210_device *dev;
//struct info_command *cmd_data;
+ struct spi_master *master;
+ struct mcp2210_spi *ms;
dev = kzalloc(sizeof(struct mcp2210_device), GFP_KERNEL);
if (!dev)
@@ -574,14 +529,34 @@ static int mcp2210_probe(struct hid_device *hdev,
goto err_free;
}
-#if 0
- ret = mcp2210_spi_probe(dev);
- if(ret < 0) {
+ ret = -ENOMEM;
+ master = spi_alloc_master(&dev->hid->dev, sizeof *ms);
+ if (!master)
goto err_power;
- }
-#endif
- /*
+ master->bus_num = -1;
+ master->num_chipselect = 4;
+ master->setup = mcp2210_spi_setup;
+ master->transfer = mcp2210_spi_transfer;
+ master->cleanup = mcp2210_spi_cleanup;
+ master->mode_bits = SPI_CPOL | SPI_CPHA;
+
+ ms = spi_master_get_devdata(master);
+ ms->dev = dev;
+ ms->master = master;
+ dev->spi_data = ms;
+
+ ret = spi_register_master(master);
+
+ demo_spi_devices[0].bus_num = master->bus_num;
+ printk("mcp2210 spi master registered bus number %d\n", demo_spi_devices[0].bus_num);
+
+ spi_new_device(master, demo_spi_devices);
+
+ if (ret)
+ goto err_power;
+
+ /*
cmd_data = kzalloc(sizeof(struct info_command), GFP_KERNEL);
if (!cmd_data)
return -ENOMEM;
@@ -612,6 +587,7 @@ err_power:
if (hdev->ll_driver->power)
hdev->ll_driver->power(hdev, PM_HINT_NORMAL);
hdev->ll_driver->close(hdev);
+ spi_master_put(master);
err_free:
kfree(dev);
return ret;
@@ -622,6 +598,8 @@ static void mcp2210_remove(struct hid_device *hdev)
struct mcp2210_device *dev = hid_get_drvdata(hdev);
struct list_head *pos, *q, *request_pos, *request_q;
struct mcp2210_command *tmp;
+ struct mcp2210_spi *ms = dev->spi_data;
+ struct spi_master *master = ms->master;
list_for_each_safe(pos, q, &dev->command_list){
tmp = list_entry(pos, struct mcp2210_command, node);
@@ -637,7 +615,7 @@ static void mcp2210_remove(struct hid_device *hdev)
kfree(tmp);
}
- //mcp2210_spi_remove(dev);
+ spi_unregister_master(master);
if (hdev->ll_driver->power)
hdev->ll_driver->power(hdev, PM_HINT_NORMAL);