diff options
Diffstat (limited to 'drivers/staging/greybus')
74 files changed, 148 insertions, 324 deletions
diff --git a/drivers/staging/greybus/Documentation/firmware/authenticate.c b/drivers/staging/greybus/Documentation/firmware/authenticate.c index b836f0a20c36..806e75b7f405 100644 --- a/drivers/staging/greybus/Documentation/firmware/authenticate.c +++ b/drivers/staging/greybus/Documentation/firmware/authenticate.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) /* * Sample code to test CAP protocol * diff --git a/drivers/staging/greybus/Documentation/firmware/firmware.c b/drivers/staging/greybus/Documentation/firmware/firmware.c index c73dee9d13c1..31d9c23e2eeb 100644 --- a/drivers/staging/greybus/Documentation/firmware/firmware.c +++ b/drivers/staging/greybus/Documentation/firmware/firmware.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) /* * Sample code to test firmware-management protocol * diff --git a/drivers/staging/greybus/arche-apb-ctrl.c b/drivers/staging/greybus/arche-apb-ctrl.c index 0412f3d06efb..b0c66112eb18 100644 --- a/drivers/staging/greybus/arche-apb-ctrl.c +++ b/drivers/staging/greybus/arche-apb-ctrl.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Arche Platform driver to control APB. * * Copyright 2014-2015 Google Inc. * Copyright 2014-2015 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/clk.h> diff --git a/drivers/staging/greybus/arche-platform.c b/drivers/staging/greybus/arche-platform.c index 21ac92d0f533..ace4eb365c0e 100644 --- a/drivers/staging/greybus/arche-platform.c +++ b/drivers/staging/greybus/arche-platform.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Arche Platform driver to enable Unipro link. * * Copyright 2014-2015 Google Inc. * Copyright 2014-2015 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/clk.h> diff --git a/drivers/staging/greybus/arche_platform.h b/drivers/staging/greybus/arche_platform.h index bcffc69d0960..02056351d25a 100644 --- a/drivers/staging/greybus/arche_platform.h +++ b/drivers/staging/greybus/arche_platform.h @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Arche Platform driver to enable Unipro link. * * Copyright 2015-2016 Google Inc. * Copyright 2015-2016 Linaro Ltd. - * - * Released under the GPLv2 only. */ #ifndef __ARCHE_PLATFORM_H diff --git a/drivers/staging/greybus/arpc.h b/drivers/staging/greybus/arpc.h index c0b63c0130c5..3534ba1a4e6c 100644 --- a/drivers/staging/greybus/arpc.h +++ b/drivers/staging/greybus/arpc.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) /* * This file is provided under a dual BSD/GPLv2 license. When using or * redistributing this file, you may do so under either license. diff --git a/drivers/staging/greybus/audio_apbridgea.c b/drivers/staging/greybus/audio_apbridgea.c index 1b4252d5d255..7ebb1bde5cb7 100644 --- a/drivers/staging/greybus/audio_apbridgea.c +++ b/drivers/staging/greybus/audio_apbridgea.c @@ -1,9 +1,8 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus Audio Device Class Protocol helpers * * Copyright 2015-2016 Google Inc. - * - * Released under the GPLv2 only. */ #include "greybus.h" diff --git a/drivers/staging/greybus/audio_apbridgea.h b/drivers/staging/greybus/audio_apbridgea.h index b94cb05c89e4..42ac6059bfc7 100644 --- a/drivers/staging/greybus/audio_apbridgea.h +++ b/drivers/staging/greybus/audio_apbridgea.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: BSD-3-Clause /** * Copyright (c) 2015-2016 Google Inc. * All rights reserved. diff --git a/drivers/staging/greybus/audio_codec.c b/drivers/staging/greybus/audio_codec.c index a6d01f0761f3..fdb9e83cc34b 100644 --- a/drivers/staging/greybus/audio_codec.c +++ b/drivers/staging/greybus/audio_codec.c @@ -1,9 +1,8 @@ +// SPDX-License-Identifier: GPL-2.0 /* * APBridge ALSA SoC dummy codec driver * Copyright 2016 Google Inc. * Copyright 2016 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/kernel.h> #include <linux/module.h> diff --git a/drivers/staging/greybus/audio_codec.h b/drivers/staging/greybus/audio_codec.h index 6fb064c69a36..161b37c8ef17 100644 --- a/drivers/staging/greybus/audio_codec.h +++ b/drivers/staging/greybus/audio_codec.h @@ -1,9 +1,8 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus audio driver * Copyright 2015 Google Inc. * Copyright 2015 Linaro Ltd. - * - * Released under the GPLv2 only. */ #ifndef __LINUX_GBAUDIO_CODEC_H diff --git a/drivers/staging/greybus/audio_gb.c b/drivers/staging/greybus/audio_gb.c index 7884d8482dc0..8894f1c87d48 100644 --- a/drivers/staging/greybus/audio_gb.c +++ b/drivers/staging/greybus/audio_gb.c @@ -1,9 +1,8 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus Audio Device Class Protocol helpers * * Copyright 2015-2016 Google Inc. - * - * Released under the GPLv2 only. */ #include "greybus.h" diff --git a/drivers/staging/greybus/audio_manager.c b/drivers/staging/greybus/audio_manager.c index aa6508b44fab..d44b070d8862 100644 --- a/drivers/staging/greybus/audio_manager.c +++ b/drivers/staging/greybus/audio_manager.c @@ -1,16 +1,15 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus operations * * Copyright 2015-2016 Google Inc. - * - * Released under the GPLv2 only. */ #include <linux/string.h> #include <linux/sysfs.h> #include <linux/module.h> #include <linux/init.h> -#include <linux/rwlock.h> +#include <linux/spinlock.h> #include <linux/idr.h> #include "audio_manager.h" diff --git a/drivers/staging/greybus/audio_manager.h b/drivers/staging/greybus/audio_manager.h index 5ab8f5e0ed3f..dcb1a20f5ff1 100644 --- a/drivers/staging/greybus/audio_manager.h +++ b/drivers/staging/greybus/audio_manager.h @@ -1,9 +1,8 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus operations * * Copyright 2015-2016 Google Inc. - * - * Released under the GPLv2 only. */ #ifndef _GB_AUDIO_MANAGER_H_ diff --git a/drivers/staging/greybus/audio_manager_module.c b/drivers/staging/greybus/audio_manager_module.c index adc16977452d..52342e832e3b 100644 --- a/drivers/staging/greybus/audio_manager_module.c +++ b/drivers/staging/greybus/audio_manager_module.c @@ -1,9 +1,8 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus operations * * Copyright 2015-2016 Google Inc. - * - * Released under the GPLv2 only. */ #include <linux/slab.h> diff --git a/drivers/staging/greybus/audio_manager_private.h b/drivers/staging/greybus/audio_manager_private.h index 079ce953c256..9d9b58fc54c4 100644 --- a/drivers/staging/greybus/audio_manager_private.h +++ b/drivers/staging/greybus/audio_manager_private.h @@ -1,9 +1,8 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus operations * * Copyright 2015-2016 Google Inc. - * - * Released under the GPLv2 only. */ #ifndef _GB_AUDIO_MANAGER_PRIVATE_H_ diff --git a/drivers/staging/greybus/audio_manager_sysfs.c b/drivers/staging/greybus/audio_manager_sysfs.c index 34ebd147052f..283fbed0c8ed 100644 --- a/drivers/staging/greybus/audio_manager_sysfs.c +++ b/drivers/staging/greybus/audio_manager_sysfs.c @@ -1,9 +1,8 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus operations * * Copyright 2015-2016 Google Inc. - * - * Released under the GPLv2 only. */ #include <linux/string.h> diff --git a/drivers/staging/greybus/audio_module.c b/drivers/staging/greybus/audio_module.c index 094c3be79b33..d065334efa23 100644 --- a/drivers/staging/greybus/audio_module.c +++ b/drivers/staging/greybus/audio_module.c @@ -1,9 +1,8 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus audio driver * Copyright 2015 Google Inc. * Copyright 2015 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/kernel.h> #include <linux/module.h> diff --git a/drivers/staging/greybus/audio_topology.c b/drivers/staging/greybus/audio_topology.c index 07fac3948f3a..de4b1b2b12f3 100644 --- a/drivers/staging/greybus/audio_topology.c +++ b/drivers/staging/greybus/audio_topology.c @@ -1,9 +1,8 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus audio driver * Copyright 2015-2016 Google Inc. * Copyright 2015-2016 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include "audio_codec.h" diff --git a/drivers/staging/greybus/authentication.c b/drivers/staging/greybus/authentication.c index 6c5dcb1c226b..16cc65e1472b 100644 --- a/drivers/staging/greybus/authentication.c +++ b/drivers/staging/greybus/authentication.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus Component Authentication Protocol (CAP) Driver. * * Copyright 2016 Google Inc. * Copyright 2016 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include "greybus.h" diff --git a/drivers/staging/greybus/bootrom.c b/drivers/staging/greybus/bootrom.c index 06df0ce03150..e85ffae85dff 100644 --- a/drivers/staging/greybus/bootrom.c +++ b/drivers/staging/greybus/bootrom.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * BOOTROM Greybus driver. * * Copyright 2016 Google Inc. * Copyright 2016 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/firmware.h> diff --git a/drivers/staging/greybus/bundle.c b/drivers/staging/greybus/bundle.c index d2ef57d090be..81c018da1248 100644 --- a/drivers/staging/greybus/bundle.c +++ b/drivers/staging/greybus/bundle.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus bundles * * Copyright 2014-2015 Google Inc. * Copyright 2014-2015 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include "greybus.h" diff --git a/drivers/staging/greybus/bundle.h b/drivers/staging/greybus/bundle.h index 0c3491def96c..ffcfd43802cc 100644 --- a/drivers/staging/greybus/bundle.h +++ b/drivers/staging/greybus/bundle.h @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus bundles * * Copyright 2014 Google Inc. * Copyright 2014 Linaro Ltd. - * - * Released under the GPLv2 only. */ #ifndef __BUNDLE_H diff --git a/drivers/staging/greybus/camera.c b/drivers/staging/greybus/camera.c index a64517eabff4..f13f16b63d7e 100644 --- a/drivers/staging/greybus/camera.c +++ b/drivers/staging/greybus/camera.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus Camera protocol driver. * * Copyright 2015 Google Inc. * Copyright 2015 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/debugfs.h> diff --git a/drivers/staging/greybus/connection.c b/drivers/staging/greybus/connection.c index 2cf64640e8ec..2103168b585e 100644 --- a/drivers/staging/greybus/connection.c +++ b/drivers/staging/greybus/connection.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus connections * * Copyright 2014 Google Inc. * Copyright 2014 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/workqueue.h> diff --git a/drivers/staging/greybus/connection.h b/drivers/staging/greybus/connection.h index 4d9f4c64176c..ec3f1d3ef3b9 100644 --- a/drivers/staging/greybus/connection.h +++ b/drivers/staging/greybus/connection.h @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus connections * * Copyright 2014 Google Inc. * Copyright 2014 Linaro Ltd. - * - * Released under the GPLv2 only. */ #ifndef __CONNECTION_H diff --git a/drivers/staging/greybus/control.c b/drivers/staging/greybus/control.c index 5b30be30a3a4..35f945a12b11 100644 --- a/drivers/staging/greybus/control.c +++ b/drivers/staging/greybus/control.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus CPort control protocol. * * Copyright 2015 Google Inc. * Copyright 2015 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/kernel.h> diff --git a/drivers/staging/greybus/control.h b/drivers/staging/greybus/control.h index 4dcaec8b9cfe..643ddb9e0f92 100644 --- a/drivers/staging/greybus/control.h +++ b/drivers/staging/greybus/control.h @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus CPort control protocol * * Copyright 2015 Google Inc. * Copyright 2015 Linaro Ltd. - * - * Released under the GPLv2 only. */ #ifndef __CONTROL_H diff --git a/drivers/staging/greybus/core.c b/drivers/staging/greybus/core.c index ba761905b790..dafa430d176e 100644 --- a/drivers/staging/greybus/core.c +++ b/drivers/staging/greybus/core.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus "Core" * * Copyright 2014-2015 Google Inc. * Copyright 2014-2015 Linaro Ltd. - * - * Released under the GPLv2 only. */ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt diff --git a/drivers/staging/greybus/debugfs.c b/drivers/staging/greybus/debugfs.c index a9d4d3da99a0..56e20c30feb5 100644 --- a/drivers/staging/greybus/debugfs.c +++ b/drivers/staging/greybus/debugfs.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus debugfs code * * Copyright 2014 Google Inc. * Copyright 2014 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/debugfs.h> diff --git a/drivers/staging/greybus/es2.c b/drivers/staging/greybus/es2.c index f7b24e0eaa6f..b082d81833a0 100644 --- a/drivers/staging/greybus/es2.c +++ b/drivers/staging/greybus/es2.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus "AP" USB driver for "ES2" controller chips * * Copyright 2014-2015 Google Inc. * Copyright 2014-2015 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/kthread.h> #include <linux/sizes.h> @@ -761,6 +760,7 @@ static int check_urb_status(struct urb *urb) case -EOVERFLOW: dev_err(dev, "%s: overflow actual length is %d\n", __func__, urb->actual_length); + /* fall through */ case -ECONNRESET: case -ENOENT: case -ESHUTDOWN: diff --git a/drivers/staging/greybus/firmware.h b/drivers/staging/greybus/firmware.h index f4f0db1cefe8..946221307ef6 100644 --- a/drivers/staging/greybus/firmware.h +++ b/drivers/staging/greybus/firmware.h @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus Firmware Management Header * * Copyright 2016 Google Inc. * Copyright 2016 Linaro Ltd. - * - * Released under the GPLv2 only. */ #ifndef __FIRMWARE_H diff --git a/drivers/staging/greybus/fw-core.c b/drivers/staging/greybus/fw-core.c index 454a98957ba5..388866d92f5b 100644 --- a/drivers/staging/greybus/fw-core.c +++ b/drivers/staging/greybus/fw-core.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus Firmware Core Bundle Driver. * * Copyright 2016 Google Inc. * Copyright 2016 Linaro Ltd. - * - * Released under the GPLv2 only. */ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt diff --git a/drivers/staging/greybus/fw-download.c b/drivers/staging/greybus/fw-download.c index 8a1a413c6cb3..d3b7cccbc10d 100644 --- a/drivers/staging/greybus/fw-download.c +++ b/drivers/staging/greybus/fw-download.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus Firmware Download Protocol Driver. * * Copyright 2016 Google Inc. * Copyright 2016 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/firmware.h> diff --git a/drivers/staging/greybus/fw-management.c b/drivers/staging/greybus/fw-management.c index 3cd6cf0a656b..71aec14f8181 100644 --- a/drivers/staging/greybus/fw-management.c +++ b/drivers/staging/greybus/fw-management.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus Firmware Management Protocol Driver. * * Copyright 2016 Google Inc. * Copyright 2016 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/cdev.h> diff --git a/drivers/staging/greybus/gb-camera.h b/drivers/staging/greybus/gb-camera.h index d45dabc5b367..ee293e461fc3 100644 --- a/drivers/staging/greybus/gb-camera.h +++ b/drivers/staging/greybus/gb-camera.h @@ -1,9 +1,8 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus Camera protocol driver. * * Copyright 2015 Google Inc. - * - * Released under the GPLv2 only. */ #ifndef __GB_CAMERA_H #define __GB_CAMERA_H diff --git a/drivers/staging/greybus/gbphy.c b/drivers/staging/greybus/gbphy.c index 80c1da8224e6..6cb85c3d3572 100644 --- a/drivers/staging/greybus/gbphy.c +++ b/drivers/staging/greybus/gbphy.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus Bridged-Phy Bus driver * * Copyright 2014 Google Inc. * Copyright 2014 Linaro Ltd. - * - * Released under the GPLv2 only. */ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt diff --git a/drivers/staging/greybus/gbphy.h b/drivers/staging/greybus/gbphy.h index 8ee68055ccc4..99463489d7d6 100644 --- a/drivers/staging/greybus/gbphy.h +++ b/drivers/staging/greybus/gbphy.h @@ -1,9 +1,8 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus Bridged-Phy Bus driver * * Copyright 2016 Google Inc. - * - * Released under the GPLv2 only. */ #ifndef __GBPHY_H diff --git a/drivers/staging/greybus/gpio.c b/drivers/staging/greybus/gpio.c index ee5f998b174f..b1d4698019a1 100644 --- a/drivers/staging/greybus/gpio.c +++ b/drivers/staging/greybus/gpio.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * GPIO Greybus driver. * * Copyright 2014 Google Inc. * Copyright 2014 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/kernel.h> diff --git a/drivers/staging/greybus/greybus.h b/drivers/staging/greybus/greybus.h index c9bb93f23927..d03ddb7c9df0 100644 --- a/drivers/staging/greybus/greybus.h +++ b/drivers/staging/greybus/greybus.h @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus driver and device API * * Copyright 2014-2015 Google Inc. * Copyright 2014-2015 Linaro Ltd. - * - * Released under the GPLv2 only. */ #ifndef __LINUX_GREYBUS_H diff --git a/drivers/staging/greybus/greybus_authentication.h b/drivers/staging/greybus/greybus_authentication.h index 4784ed98e8a3..03ea9615b217 100644 --- a/drivers/staging/greybus/greybus_authentication.h +++ b/drivers/staging/greybus/greybus_authentication.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) /* * Greybus Component Authentication User Header * diff --git a/drivers/staging/greybus/greybus_firmware.h b/drivers/staging/greybus/greybus_firmware.h index 277a2acce6fd..b58281a63ba4 100644 --- a/drivers/staging/greybus/greybus_firmware.h +++ b/drivers/staging/greybus/greybus_firmware.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) /* * Greybus Firmware Management User Header * diff --git a/drivers/staging/greybus/greybus_manifest.h b/drivers/staging/greybus/greybus_manifest.h index d135945cefe1..2cec5cf7a846 100644 --- a/drivers/staging/greybus/greybus_manifest.h +++ b/drivers/staging/greybus/greybus_manifest.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus manifest definition * diff --git a/drivers/staging/greybus/greybus_protocols.h b/drivers/staging/greybus/greybus_protocols.h index b1be0b0af464..9bd7b6dfb476 100644 --- a/drivers/staging/greybus/greybus_protocols.h +++ b/drivers/staging/greybus/greybus_protocols.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) /* * This file is provided under a dual BSD/GPLv2 license. When using or * redistributing this file, you may do so under either license. diff --git a/drivers/staging/greybus/greybus_trace.h b/drivers/staging/greybus/greybus_trace.h index f8feae4dc3b5..7b5e2c6b1f6b 100644 --- a/drivers/staging/greybus/greybus_trace.h +++ b/drivers/staging/greybus/greybus_trace.h @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus driver and device API * * Copyright 2015 Google Inc. * Copyright 2015 Linaro Ltd. - * - * Released under the GPLv2 only. */ #undef TRACE_SYSTEM #define TRACE_SYSTEM greybus diff --git a/drivers/staging/greybus/hd.c b/drivers/staging/greybus/hd.c index 185ae3fa10fd..969f86697673 100644 --- a/drivers/staging/greybus/hd.c +++ b/drivers/staging/greybus/hd.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus Host Device * * Copyright 2014-2015 Google Inc. * Copyright 2014-2015 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/kernel.h> diff --git a/drivers/staging/greybus/hd.h b/drivers/staging/greybus/hd.h index e7927bb1761c..6cf024a20a58 100644 --- a/drivers/staging/greybus/hd.h +++ b/drivers/staging/greybus/hd.h @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus Host Device * * Copyright 2014-2015 Google Inc. * Copyright 2014-2015 Linaro Ltd. - * - * Released under the GPLv2 only. */ #ifndef __HD_H diff --git a/drivers/staging/greybus/hid.c b/drivers/staging/greybus/hid.c index 465101bbab69..04053ff075a6 100644 --- a/drivers/staging/greybus/hid.c +++ b/drivers/staging/greybus/hid.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * HID class driver for the Greybus. * * Copyright 2014 Google Inc. * Copyright 2014 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/bitops.h> diff --git a/drivers/staging/greybus/i2c.c b/drivers/staging/greybus/i2c.c index c2a50087000c..58a37deb6579 100644 --- a/drivers/staging/greybus/i2c.c +++ b/drivers/staging/greybus/i2c.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * I2C bridge driver for the Greybus "generic" I2C module. * * Copyright 2014 Google Inc. * Copyright 2014 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/kernel.h> diff --git a/drivers/staging/greybus/interface.c b/drivers/staging/greybus/interface.c index 71e5cc234e78..d7b5b89a2f40 100644 --- a/drivers/staging/greybus/interface.c +++ b/drivers/staging/greybus/interface.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus interface code * * Copyright 2014 Google Inc. * Copyright 2014 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/delay.h> diff --git a/drivers/staging/greybus/interface.h b/drivers/staging/greybus/interface.h index bd31b8c18d5b..1c00c5bb3ec9 100644 --- a/drivers/staging/greybus/interface.h +++ b/drivers/staging/greybus/interface.h @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus Interface Block code * * Copyright 2014 Google Inc. * Copyright 2014 Linaro Ltd. - * - * Released under the GPLv2 only. */ #ifndef __INTERFACE_H diff --git a/drivers/staging/greybus/light.c b/drivers/staging/greybus/light.c index 3f4148c92308..010ae1e9c7fb 100644 --- a/drivers/staging/greybus/light.c +++ b/drivers/staging/greybus/light.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus Lights protocol driver. * * Copyright 2015 Google Inc. * Copyright 2015 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/kernel.h> @@ -925,6 +924,8 @@ static void __gb_lights_led_unregister(struct gb_channel *channel) return; led_classdev_unregister(cdev); + kfree(cdev->name); + cdev->name = NULL; channel->led = NULL; } @@ -998,11 +999,7 @@ static int gb_lights_channel_config(struct gb_light *light, light->has_flash = true; - ret = gb_lights_channel_flash_config(channel); - if (ret < 0) - return ret; - - return ret; + return gb_lights_channel_flash_config(channel); } static int gb_lights_light_config(struct gb_lights *glights, u8 id) diff --git a/drivers/staging/greybus/log.c b/drivers/staging/greybus/log.c index 5c5bedaf69a6..15a88574dbb0 100644 --- a/drivers/staging/greybus/log.c +++ b/drivers/staging/greybus/log.c @@ -1,9 +1,8 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus driver for the log protocol * * Copyright 2016 Google Inc. - * - * Released under the GPLv2 only. */ #include <linux/kernel.h> #include <linux/module.h> diff --git a/drivers/staging/greybus/loopback.c b/drivers/staging/greybus/loopback.c index 08e255884206..42f6f3de967c 100644 --- a/drivers/staging/greybus/loopback.c +++ b/drivers/staging/greybus/loopback.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Loopback bridge driver for the Greybus loopback module. * * Copyright 2014 Google Inc. * Copyright 2014 Linaro Ltd. - * - * Released under the GPLv2 only. */ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt @@ -58,12 +57,7 @@ static struct gb_loopback_device gb_dev; struct gb_loopback_async_operation { struct gb_loopback *gb; struct gb_operation *operation; - struct timeval ts; - struct timer_list timer; - struct list_head entry; - struct work_struct work; - struct kref kref; - bool pending; + ktime_t ts; int (*completion)(struct gb_loopback_async_operation *op_async); }; @@ -72,7 +66,6 @@ struct gb_loopback { struct dentry *file; struct kfifo kfifo_lat; - struct kfifo kfifo_ts; struct mutex mutex; struct task_struct *task; struct list_head entry; @@ -82,7 +75,7 @@ struct gb_loopback { atomic_t outstanding_operations; /* Per connection stats */ - struct timeval ts; + ktime_t ts; struct gb_loopback_stats latency; struct gb_loopback_stats throughput; struct gb_loopback_stats requests_per_second; @@ -262,7 +255,6 @@ static void gb_loopback_check_attr(struct gb_loopback *gb) gb->iteration_max, kfifo_depth); } kfifo_reset_out(&gb->kfifo_lat); - kfifo_reset_out(&gb->kfifo_ts); switch (gb->type) { case GB_LOOPBACK_TYPE_PING: @@ -377,21 +369,9 @@ static u64 __gb_loopback_calc_latency(u64 t1, u64 t2) return NSEC_PER_DAY - t2 + t1; } -static u64 gb_loopback_calc_latency(struct timeval *ts, struct timeval *te) -{ - u64 t1, t2; - - t1 = timeval_to_ns(ts); - t2 = timeval_to_ns(te); - - return __gb_loopback_calc_latency(t1, t2); -} - -static void gb_loopback_push_latency_ts(struct gb_loopback *gb, - struct timeval *ts, struct timeval *te) +static u64 gb_loopback_calc_latency(ktime_t ts, ktime_t te) { - kfifo_in(&gb->kfifo_ts, (unsigned char *)ts, sizeof(*ts)); - kfifo_in(&gb->kfifo_ts, (unsigned char *)te, sizeof(*te)); + return __gb_loopback_calc_latency(ktime_to_ns(ts), ktime_to_ns(te)); } static int gb_loopback_operation_sync(struct gb_loopback *gb, int type, @@ -399,10 +379,10 @@ static int gb_loopback_operation_sync(struct gb_loopback *gb, int type, void *response, int response_size) { struct gb_operation *operation; - struct timeval ts, te; + ktime_t ts, te; int ret; - do_gettimeofday(&ts); + ts = ktime_get(); operation = gb_operation_create(gb->connection, type, request_size, response_size, GFP_KERNEL); if (!operation) @@ -430,11 +410,10 @@ static int gb_loopback_operation_sync(struct gb_loopback *gb, int type, } } - do_gettimeofday(&te); + te = ktime_get(); /* Calculate the total time the message took */ - gb_loopback_push_latency_ts(gb, &ts, &te); - gb->elapsed_nsecs = gb_loopback_calc_latency(&ts, &te); + gb->elapsed_nsecs = gb_loopback_calc_latency(ts, te); out_put_operation: gb_operation_put(operation); @@ -442,56 +421,6 @@ out_put_operation: return ret; } -static void __gb_loopback_async_operation_destroy(struct kref *kref) -{ - struct gb_loopback_async_operation *op_async; - - op_async = container_of(kref, struct gb_loopback_async_operation, kref); - - list_del(&op_async->entry); - if (op_async->operation) - gb_operation_put(op_async->operation); - atomic_dec(&op_async->gb->outstanding_operations); - wake_up(&op_async->gb->wq_completion); - kfree(op_async); -} - -static void gb_loopback_async_operation_get(struct gb_loopback_async_operation - *op_async) -{ - kref_get(&op_async->kref); -} - -static void gb_loopback_async_operation_put(struct gb_loopback_async_operation - *op_async) -{ - unsigned long flags; - - spin_lock_irqsave(&gb_dev.lock, flags); - kref_put(&op_async->kref, __gb_loopback_async_operation_destroy); - spin_unlock_irqrestore(&gb_dev.lock, flags); -} - -static struct gb_loopback_async_operation * - gb_loopback_operation_find(u16 id) -{ - struct gb_loopback_async_operation *op_async; - bool found = false; - unsigned long flags; - - spin_lock_irqsave(&gb_dev.lock, flags); - list_for_each_entry(op_async, &gb_dev.list_op_async, entry) { - if (op_async->operation->id == id) { - gb_loopback_async_operation_get(op_async); - found = true; - break; - } - } - spin_unlock_irqrestore(&gb_dev.lock, flags); - - return found ? op_async : NULL; -} - static void gb_loopback_async_wait_all(struct gb_loopback *gb) { wait_event(gb->wq_completion, @@ -502,87 +431,42 @@ static void gb_loopback_async_operation_callback(struct gb_operation *operation) { struct gb_loopback_async_operation *op_async; struct gb_loopback *gb; - struct timeval te; - bool err = false; - - do_gettimeofday(&te); - op_async = gb_loopback_operation_find(operation->id); - if (!op_async) - return; + ktime_t te; + int result; + te = ktime_get(); + result = gb_operation_result(operation); + op_async = gb_operation_get_data(operation); gb = op_async->gb; + mutex_lock(&gb->mutex); - if (!op_async->pending || gb_operation_result(operation)) { - err = true; + if (!result && op_async->completion) + result = op_async->completion(op_async); + + if (!result) { + gb->elapsed_nsecs = gb_loopback_calc_latency(op_async->ts, te); } else { - if (op_async->completion) - if (op_async->completion(op_async)) - err = true; + gb->error++; + if (result == -ETIMEDOUT) + gb->requests_timedout++; } - if (!err) { - gb_loopback_push_latency_ts(gb, &op_async->ts, &te); - gb->elapsed_nsecs = gb_loopback_calc_latency(&op_async->ts, - &te); - } + gb->iteration_count++; + gb_loopback_calculate_stats(gb, result); - if (op_async->pending) { - if (err) - gb->error++; - gb->iteration_count++; - op_async->pending = false; - del_timer_sync(&op_async->timer); - gb_loopback_async_operation_put(op_async); - gb_loopback_calculate_stats(gb, err); - } mutex_unlock(&gb->mutex); dev_dbg(&gb->connection->bundle->dev, "complete operation %d\n", operation->id); - gb_loopback_async_operation_put(op_async); -} - -static void gb_loopback_async_operation_work(struct work_struct *work) -{ - struct gb_loopback *gb; - struct gb_operation *operation; - struct gb_loopback_async_operation *op_async; - - op_async = container_of(work, struct gb_loopback_async_operation, work); - gb = op_async->gb; - operation = op_async->operation; - - mutex_lock(&gb->mutex); - if (op_async->pending) { - gb->requests_timedout++; - gb->error++; - gb->iteration_count++; - op_async->pending = false; - gb_loopback_async_operation_put(op_async); - gb_loopback_calculate_stats(gb, true); - } - mutex_unlock(&gb->mutex); - - dev_dbg(&gb->connection->bundle->dev, "timeout operation %d\n", - operation->id); - - gb_operation_cancel(operation, -ETIMEDOUT); - gb_loopback_async_operation_put(op_async); -} - -static void gb_loopback_async_operation_timeout(unsigned long data) -{ - struct gb_loopback_async_operation *op_async; - u16 id = data; + /* Wake up waiters */ + atomic_dec(&op_async->gb->outstanding_operations); + wake_up(&gb->wq_completion); - op_async = gb_loopback_operation_find(id); - if (!op_async) { - pr_err("operation %d not found - time out ?\n", id); - return; - } - schedule_work(&op_async->work); + /* Release resources */ + gb_operation_put(operation); + kfree(op_async); } static int gb_loopback_async_operation(struct gb_loopback *gb, int type, @@ -593,15 +477,11 @@ static int gb_loopback_async_operation(struct gb_loopback *gb, int type, struct gb_loopback_async_operation *op_async; struct gb_operation *operation; int ret; - unsigned long flags; op_async = kzalloc(sizeof(*op_async), GFP_KERNEL); if (!op_async) return -ENOMEM; - INIT_WORK(&op_async->work, gb_loopback_async_operation_work); - kref_init(&op_async->kref); - operation = gb_operation_create(gb->connection, type, request_size, response_size, GFP_KERNEL); if (!operation) { @@ -612,35 +492,24 @@ static int gb_loopback_async_operation(struct gb_loopback *gb, int type, if (request_size) memcpy(operation->request->payload, request, request_size); + gb_operation_set_data(operation, op_async); + op_async->gb = gb; op_async->operation = operation; op_async->completion = completion; - spin_lock_irqsave(&gb_dev.lock, flags); - list_add_tail(&op_async->entry, &gb_dev.list_op_async); - spin_unlock_irqrestore(&gb_dev.lock, flags); + op_async->ts = ktime_get(); - do_gettimeofday(&op_async->ts); - op_async->pending = true; atomic_inc(&gb->outstanding_operations); - mutex_lock(&gb->mutex); ret = gb_operation_request_send(operation, gb_loopback_async_operation_callback, - 0, + jiffies_to_msecs(gb->jiffy_timeout), GFP_KERNEL); - if (ret) - goto error; - - setup_timer(&op_async->timer, gb_loopback_async_operation_timeout, - (unsigned long)operation->id); - op_async->timer.expires = jiffies + gb->jiffy_timeout; - add_timer(&op_async->timer); - - goto done; -error: - gb_loopback_async_operation_put(op_async); -done: - mutex_unlock(&gb->mutex); + if (ret) { + atomic_dec(&gb->outstanding_operations); + gb_operation_put(operation); + kfree(op_async); + } return ret; } @@ -854,7 +723,7 @@ static void gb_loopback_reset_stats(struct gb_loopback *gb) /* Should be initialized at least once per transaction set */ gb->apbridge_latency_ts = 0; gb->gbphy_latency_ts = 0; - memset(&gb->ts, 0, sizeof(struct timeval)); + gb->ts = ktime_set(0, 0); } static void gb_loopback_update_stats(struct gb_loopback_stats *stats, u32 val) @@ -937,15 +806,15 @@ static void gb_loopback_calculate_stats(struct gb_loopback *gb, bool error) { u64 nlat; u32 lat; - struct timeval te; + ktime_t te; if (!error) { gb->requests_completed++; gb_loopback_calculate_latency_stats(gb); } - do_gettimeofday(&te); - nlat = gb_loopback_calc_latency(&gb->ts, &te); + te = ktime_get(); + nlat = gb_loopback_calc_latency(gb->ts, te); if (nlat >= NSEC_PER_SEC || gb->iteration_count == gb->iteration_max) { lat = gb_loopback_nsec_to_usec_latency(nlat); @@ -1029,9 +898,8 @@ static int gb_loopback_fn(void *data) size = gb->size; us_wait = gb->us_wait; type = gb->type; - if (gb->ts.tv_usec == 0 && gb->ts.tv_sec == 0) - do_gettimeofday(&gb->ts); - mutex_unlock(&gb->mutex); + if (ktime_to_ns(gb->ts) == 0) + gb->ts = ktime_get(); /* Else operations to perform */ if (gb->async) { @@ -1042,8 +910,10 @@ static int gb_loopback_fn(void *data) else if (type == GB_LOOPBACK_TYPE_SINK) error = gb_loopback_async_sink(gb, size); - if (error) + if (error) { gb->error++; + gb->iteration_count++; + } } else { /* We are effectively single threaded here */ if (type == GB_LOOPBACK_TYPE_PING) @@ -1059,6 +929,7 @@ static int gb_loopback_fn(void *data) gb_loopback_calculate_stats(gb, !!error); } gb->send_count++; + mutex_unlock(&gb->mutex); if (us_wait) { if (us_wait < 20000) @@ -1241,18 +1112,12 @@ static int gb_loopback_probe(struct gb_bundle *bundle, retval = -ENOMEM; goto out_conn; } - if (kfifo_alloc(&gb->kfifo_ts, kfifo_depth * sizeof(struct timeval) * 2, - GFP_KERNEL)) { - retval = -ENOMEM; - goto out_kfifo0; - } - /* Fork worker thread */ mutex_init(&gb->mutex); gb->task = kthread_run(gb_loopback_fn, gb, "gb_loopback"); if (IS_ERR(gb->task)) { retval = PTR_ERR(gb->task); - goto out_kfifo1; + goto out_kfifo; } spin_lock_irqsave(&gb_dev.lock, flags); @@ -1266,9 +1131,7 @@ static int gb_loopback_probe(struct gb_bundle *bundle, return 0; -out_kfifo1: - kfifo_free(&gb->kfifo_ts); -out_kfifo0: +out_kfifo: kfifo_free(&gb->kfifo_lat); out_conn: device_unregister(dev); @@ -1302,7 +1165,6 @@ static void gb_loopback_disconnect(struct gb_bundle *bundle) kthread_stop(gb->task); kfifo_free(&gb->kfifo_lat); - kfifo_free(&gb->kfifo_ts); gb_connection_latency_tag_disable(gb->connection); debugfs_remove(gb->file); diff --git a/drivers/staging/greybus/manifest.c b/drivers/staging/greybus/manifest.c index 7b903770a684..08db49264f2b 100644 --- a/drivers/staging/greybus/manifest.c +++ b/drivers/staging/greybus/manifest.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus manifest parsing * * Copyright 2014-2015 Google Inc. * Copyright 2014-2015 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include "greybus.h" diff --git a/drivers/staging/greybus/manifest.h b/drivers/staging/greybus/manifest.h index d96428407cd7..f3c95a255631 100644 --- a/drivers/staging/greybus/manifest.h +++ b/drivers/staging/greybus/manifest.h @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus manifest parsing * * Copyright 2014 Google Inc. * Copyright 2014 Linaro Ltd. - * - * Released under the GPLv2 only. */ #ifndef __MANIFEST_H diff --git a/drivers/staging/greybus/module.c b/drivers/staging/greybus/module.c index 660b4674a76f..b785382192de 100644 --- a/drivers/staging/greybus/module.c +++ b/drivers/staging/greybus/module.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus Module code * * Copyright 2016 Google Inc. * Copyright 2016 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include "greybus.h" diff --git a/drivers/staging/greybus/module.h b/drivers/staging/greybus/module.h index 88a97ce04243..b1ebcc6636db 100644 --- a/drivers/staging/greybus/module.h +++ b/drivers/staging/greybus/module.h @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus Module code * * Copyright 2016 Google Inc. * Copyright 2016 Linaro Ltd. - * - * Released under the GPLv2 only. */ #ifndef __MODULE_H diff --git a/drivers/staging/greybus/operation.c b/drivers/staging/greybus/operation.c index 3023012808d9..609332b3e15b 100644 --- a/drivers/staging/greybus/operation.c +++ b/drivers/staging/greybus/operation.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus operations * * Copyright 2014-2015 Google Inc. * Copyright 2014-2015 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/kernel.h> diff --git a/drivers/staging/greybus/operation.h b/drivers/staging/greybus/operation.h index 7529f01b2529..40b7b02fff88 100644 --- a/drivers/staging/greybus/operation.h +++ b/drivers/staging/greybus/operation.h @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus operations * * Copyright 2014 Google Inc. * Copyright 2014 Linaro Ltd. - * - * Released under the GPLv2 only. */ #ifndef __OPERATION_H @@ -105,6 +104,8 @@ struct gb_operation { int active; struct list_head links; /* connection->operations */ + + void *private; }; static inline bool @@ -206,6 +207,17 @@ static inline int gb_operation_unidirectional(struct gb_connection *connection, request, request_size, GB_OPERATION_TIMEOUT_DEFAULT); } +static inline void *gb_operation_get_data(struct gb_operation *operation) +{ + return operation->private; +} + +static inline void gb_operation_set_data(struct gb_operation *operation, + void *data) +{ + operation->private = data; +} + int gb_operation_init(void); void gb_operation_exit(void); diff --git a/drivers/staging/greybus/power_supply.c b/drivers/staging/greybus/power_supply.c index 20cac20518d7..0529e5628c24 100644 --- a/drivers/staging/greybus/power_supply.c +++ b/drivers/staging/greybus/power_supply.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Power Supply driver for a Greybus module. * * Copyright 2014-2015 Google Inc. * Copyright 2014-2015 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/kernel.h> diff --git a/drivers/staging/greybus/pwm.c b/drivers/staging/greybus/pwm.c index f0404bc37123..4a6d394b6c44 100644 --- a/drivers/staging/greybus/pwm.c +++ b/drivers/staging/greybus/pwm.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * PWM Greybus driver. * * Copyright 2014 Google Inc. * Copyright 2014 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/kernel.h> diff --git a/drivers/staging/greybus/raw.c b/drivers/staging/greybus/raw.c index 729d25811568..838acbe84ca0 100644 --- a/drivers/staging/greybus/raw.c +++ b/drivers/staging/greybus/raw.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus driver for the Raw protocol * * Copyright 2015 Google Inc. * Copyright 2015 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/kernel.h> #include <linux/module.h> diff --git a/drivers/staging/greybus/sdio.c b/drivers/staging/greybus/sdio.c index 101ca5097fc9..38e85033fc4b 100644 --- a/drivers/staging/greybus/sdio.c +++ b/drivers/staging/greybus/sdio.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * SD/MMC Greybus driver. * * Copyright 2014-2015 Google Inc. * Copyright 2014-2015 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/kernel.h> diff --git a/drivers/staging/greybus/spi.c b/drivers/staging/greybus/spi.c index c893552b5c0b..47d896992b35 100644 --- a/drivers/staging/greybus/spi.c +++ b/drivers/staging/greybus/spi.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * SPI bridge PHY driver. * * Copyright 2014-2016 Google Inc. * Copyright 2014-2016 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/module.h> diff --git a/drivers/staging/greybus/spilib.c b/drivers/staging/greybus/spilib.c index e97b19148497..2e07c6b41334 100644 --- a/drivers/staging/greybus/spilib.c +++ b/drivers/staging/greybus/spilib.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus SPI library * * Copyright 2014-2016 Google Inc. * Copyright 2014-2016 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/bitops.h> @@ -544,12 +543,15 @@ int gb_spilib_master_init(struct gb_connection *connection, struct device *dev, return 0; -exit_spi_unregister: - spi_unregister_master(master); exit_spi_put: spi_master_put(master); return ret; + +exit_spi_unregister: + spi_unregister_master(master); + + return ret; } EXPORT_SYMBOL_GPL(gb_spilib_master_init); @@ -558,7 +560,6 @@ void gb_spilib_master_exit(struct gb_connection *connection) struct spi_master *master = gb_connection_get_data(connection); spi_unregister_master(master); - spi_master_put(master); } EXPORT_SYMBOL_GPL(gb_spilib_master_exit); diff --git a/drivers/staging/greybus/spilib.h b/drivers/staging/greybus/spilib.h index cb6092578a92..043d4d32c3ee 100644 --- a/drivers/staging/greybus/spilib.h +++ b/drivers/staging/greybus/spilib.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus SPI library header * diff --git a/drivers/staging/greybus/svc.c b/drivers/staging/greybus/svc.c index 516f827e5ed9..a874fed761a1 100644 --- a/drivers/staging/greybus/svc.c +++ b/drivers/staging/greybus/svc.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * SVC Greybus driver. * * Copyright 2015 Google Inc. * Copyright 2015 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/debugfs.h> diff --git a/drivers/staging/greybus/svc.h b/drivers/staging/greybus/svc.h index 226c2a396fc8..ad01783bac9c 100644 --- a/drivers/staging/greybus/svc.h +++ b/drivers/staging/greybus/svc.h @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus SVC code * * Copyright 2015 Google Inc. * Copyright 2015 Linaro Ltd. - * - * Released under the GPLv2 only. */ #ifndef __SVC_H diff --git a/drivers/staging/greybus/svc_watchdog.c b/drivers/staging/greybus/svc_watchdog.c index 779fbea5d4ba..7868ad8211c5 100644 --- a/drivers/staging/greybus/svc_watchdog.c +++ b/drivers/staging/greybus/svc_watchdog.c @@ -1,9 +1,8 @@ +// SPDX-License-Identifier: GPL-2.0 /* * SVC Greybus "watchdog" driver. * * Copyright 2016 Google Inc. - * - * Released under the GPLv2 only. */ #include <linux/delay.h> diff --git a/drivers/staging/greybus/tools/lbtest b/drivers/staging/greybus/tools/lbtest index d7353f1a2a6f..47c481239e98 100755 --- a/drivers/staging/greybus/tools/lbtest +++ b/drivers/staging/greybus/tools/lbtest @@ -1,4 +1,5 @@ #!/usr/bin/env python +# SPDX-License-Identifier: BSD-3-Clause # Copyright (c) 2015 Google, Inc. # Copyright (c) 2015 Linaro, Ltd. diff --git a/drivers/staging/greybus/tools/loopback_test.c b/drivers/staging/greybus/tools/loopback_test.c index fbe589fca840..c51610ce24af 100644 --- a/drivers/staging/greybus/tools/loopback_test.c +++ b/drivers/staging/greybus/tools/loopback_test.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: BSD-3-Clause /* * Loopback test application * diff --git a/drivers/staging/greybus/uart.c b/drivers/staging/greybus/uart.c index c6d01b800d3c..8a006323c3c1 100644 --- a/drivers/staging/greybus/uart.c +++ b/drivers/staging/greybus/uart.c @@ -1,11 +1,10 @@ +// SPDX-License-Identifier: GPL-2.0 /* * UART driver for the Greybus "generic" UART module. * * Copyright 2014 Google Inc. * Copyright 2014 Linaro Ltd. * - * Released under the GPLv2 only. - * * Heavily based on drivers/usb/class/cdc-acm.c and * drivers/usb/serial/usb-serial.c. */ diff --git a/drivers/staging/greybus/usb.c b/drivers/staging/greybus/usb.c index f93a76d02de6..1c246c73a085 100644 --- a/drivers/staging/greybus/usb.c +++ b/drivers/staging/greybus/usb.c @@ -1,11 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * USB host driver for the Greybus "generic" USB module. * * Copyright 2014 Google Inc. * Copyright 2014 Linaro Ltd. - * - * Released under the GPLv2 only. - * */ #include <linux/kernel.h> #include <linux/module.h> diff --git a/drivers/staging/greybus/vibrator.c b/drivers/staging/greybus/vibrator.c index 5cd8a50d41ad..3e5dedeacd5c 100644 --- a/drivers/staging/greybus/vibrator.c +++ b/drivers/staging/greybus/vibrator.c @@ -1,10 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Greybus Vibrator protocol driver. * * Copyright 2014 Google Inc. * Copyright 2014 Linaro Ltd. - * - * Released under the GPLv2 only. */ #include <linux/kernel.h> |