From 8888b963743be7aad2a98bc165fb51150db5fd9f Mon Sep 17 00:00:00 2001 From: Viresh Kumar Date: Sat, 14 May 2016 23:42:20 +0530 Subject: greybus: spi: Separate out spilib from spi bridged PHY bundle driver spilib can be used by multiple bridge drivers implementing different bundle classes. Separate out bridged PHY bundle drivers parts. Signed-off-by: Viresh Kumar Reviewed-by: Rui Miguel Silva Signed-off-by: Greg Kroah-Hartman --- drivers/staging/greybus/Makefile | 2 ++ drivers/staging/greybus/spi.c | 75 ++++++++++++++++++++++++++++++++++++++++ drivers/staging/greybus/spilib.c | 60 -------------------------------- 3 files changed, 77 insertions(+), 60 deletions(-) create mode 100644 drivers/staging/greybus/spi.c (limited to 'drivers/staging/greybus') diff --git a/drivers/staging/greybus/Makefile b/drivers/staging/greybus/Makefile index a9802dacb7f1..35fc6bff85fc 100644 --- a/drivers/staging/greybus/Makefile +++ b/drivers/staging/greybus/Makefile @@ -40,6 +40,7 @@ gb-pwm-y := pwm.o gb-gpio-y := gpio.o gb-i2c-y := i2c.o gb-usb-y := usb.o +gb-spi-y := spi.o obj-m += greybus.o obj-m += gb-gpbridge.o @@ -69,6 +70,7 @@ obj-m += gb-pwm.o obj-m += gb-gpio.o obj-m += gb-i2c.o obj-m += gb-usb.o +obj-m += gb-spi.o KERNELVER ?= $(shell uname -r) KERNELDIR ?= /lib/modules/$(KERNELVER)/build diff --git a/drivers/staging/greybus/spi.c b/drivers/staging/greybus/spi.c new file mode 100644 index 000000000000..1cf5f509363c --- /dev/null +++ b/drivers/staging/greybus/spi.c @@ -0,0 +1,75 @@ +/* + * SPI bridge PHY driver. + * + * Copyright 2014-2016 Google Inc. + * Copyright 2014-2016 Linaro Ltd. + * + * Released under the GPLv2 only. + */ + +#include + +#include "greybus.h" +#include "gpbridge.h" +#include "spilib.h" + +static int gb_spi_probe(struct gpbridge_device *gpbdev, + const struct gpbridge_device_id *id) +{ + struct gb_connection *connection; + int ret; + + connection = gb_connection_create(gpbdev->bundle, + le16_to_cpu(gpbdev->cport_desc->id), + NULL); + if (IS_ERR(connection)) + return PTR_ERR(connection); + + ret = gb_connection_enable(connection); + if (ret) + goto exit_connection_destroy; + + ret = gb_gpbridge_get_version(connection); + if (ret) + goto exit_connection_disable; + + ret = gb_spilib_master_init(connection, &gpbdev->dev); + if (ret) + goto exit_connection_disable; + + gb_gpbridge_set_data(gpbdev, connection); + + return 0; + +exit_connection_disable: + gb_connection_disable(connection); +exit_connection_destroy: + gb_connection_destroy(connection); + + return ret; +} + +static void gb_spi_remove(struct gpbridge_device *gpbdev) +{ + struct gb_connection *connection = gb_gpbridge_get_data(gpbdev); + + gb_spilib_master_exit(connection); + gb_connection_disable(connection); + gb_connection_destroy(connection); +} + +static const struct gpbridge_device_id gb_spi_id_table[] = { + { GPBRIDGE_PROTOCOL(GREYBUS_PROTOCOL_SPI) }, + { }, +}; +MODULE_DEVICE_TABLE(gpbridge, gb_spi_id_table); + +static struct gpbridge_driver spi_driver = { + .name = "spi", + .probe = gb_spi_probe, + .remove = gb_spi_remove, + .id_table = gb_spi_id_table, +}; + +module_gpbridge_driver(spi_driver); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/staging/greybus/spilib.c b/drivers/staging/greybus/spilib.c index c7fe87801187..6ab1c5f77b7a 100644 --- a/drivers/staging/greybus/spilib.c +++ b/drivers/staging/greybus/spilib.c @@ -14,7 +14,6 @@ #include #include "greybus.h" -#include "gpbridge.h" #include "spilib.h" struct gb_spilib { @@ -521,63 +520,4 @@ void gb_spilib_master_exit(struct gb_connection *connection) } EXPORT_SYMBOL_GPL(gb_spilib_master_exit); -static int gb_spi_probe(struct gpbridge_device *gpbdev, - const struct gpbridge_device_id *id) -{ - struct gb_connection *connection; - int ret; - - connection = gb_connection_create(gpbdev->bundle, - le16_to_cpu(gpbdev->cport_desc->id), - NULL); - if (IS_ERR(connection)) - return PTR_ERR(connection); - - ret = gb_connection_enable(connection); - if (ret) - goto exit_connection_destroy; - - ret = gb_gpbridge_get_version(connection); - if (ret) - goto exit_connection_disable; - - ret = gb_spilib_master_init(connection, &gpbdev->dev); - if (ret) - goto exit_connection_disable; - - gb_gpbridge_set_data(gpbdev, connection); - - return 0; - -exit_connection_disable: - gb_connection_disable(connection); -exit_connection_destroy: - gb_connection_destroy(connection); - - return ret; -} - -static void gb_spi_remove(struct gpbridge_device *gpbdev) -{ - struct gb_connection *connection = gb_gpbridge_get_data(gpbdev); - - gb_spilib_master_exit(connection); - gb_connection_disable(connection); - gb_connection_destroy(connection); -} - -static const struct gpbridge_device_id gb_spi_id_table[] = { - { GPBRIDGE_PROTOCOL(GREYBUS_PROTOCOL_SPI) }, - { }, -}; -MODULE_DEVICE_TABLE(gpbridge, gb_spi_id_table); - -static struct gpbridge_driver spi_driver = { - .name = "spi", - .probe = gb_spi_probe, - .remove = gb_spi_remove, - .id_table = gb_spi_id_table, -}; - -module_gpbridge_driver(spi_driver); MODULE_LICENSE("GPL v2"); -- cgit v1.2.3-55-g7522