Re: [PATCH v4] leds: USB: HID: Add support for MSI GT683R led panels

2014-06-12 Thread Johan Hovold
On Thu, Jun 12, 2014 at 01:48:41AM +0300, Janne Kanniainen wrote:
 This driver adds support for USB controlled led panels that exists in MSI 
 GT683R laptop

You forgot to break this line.

 
 Signed-off-by: Janne Kanniainen janne.kanniai...@gmail.com
 ---
 Changes in v2:
 - sorted headers to alphabetic order
 - using devm_kzalloc
 - using BIT(n)
 - using usb_control_msg instead of usb_submit_urb
 - removing unneeded code
 
 Changes in v3:
 - implemented as HID device
 - some cleanups and bug fixes
 
 Changes in v4:
   - more cleanups
   - support for selecting leds
   - support for selecting status

That was fast. :)

 
  drivers/hid/Kconfig |  11 ++
  drivers/hid/Makefile|   1 +
  drivers/hid/hid-core.c  |   1 +
  drivers/hid/hid-gt683r.c| 320 
 
  drivers/hid/hid-ids.h   |   2 +-
  drivers/hid/usbhid/hid-quirks.c |   2 +-
  6 files changed, 335 insertions(+), 2 deletions(-)
  create mode 100644 drivers/hid/hid-gt683r.c
 
 diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
 index 7af9d0b..d93e0ae 100644
 --- a/drivers/hid/Kconfig
 +++ b/drivers/hid/Kconfig
 @@ -261,6 +261,17 @@ config HOLTEK_FF
 Say Y here if you have a Holtek On Line Grip based game controller
 and want to have force feedback support for it.
  
 +config HID_GT683R
 +   tristate MSI GT68xR LED support
 +   depends on LEDS_CLASS  USB_HID
 +   ---help---
 +   Say Y here if you want to enable support for the MSI GT68xR LEDS
 +
 +   This driver support following states normal, breathing and audio.
 +   You can also select which leds you want to enable.
 +   Currently the following devices are know to be supported:
 +   - MSI GT683R
 +
  config HID_HUION
   tristate Huion tablets
   depends on USB_HID
 diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
 index fc712dd..7129311 100644
 --- a/drivers/hid/Makefile
 +++ b/drivers/hid/Makefile
 @@ -48,6 +48,7 @@ obj-$(CONFIG_HID_EMS_FF)+= hid-emsff.o
  obj-$(CONFIG_HID_ELECOM) += hid-elecom.o
  obj-$(CONFIG_HID_ELO)+= hid-elo.o
  obj-$(CONFIG_HID_EZKEY)  += hid-ezkey.o
 +obj-$(CONFIG_HID_GT683R) += hid-gt683r.o
  obj-$(CONFIG_HID_GYRATION)   += hid-gyration.o
  obj-$(CONFIG_HID_HOLTEK) += hid-holtek-kbd.o
  obj-$(CONFIG_HID_HOLTEK) += hid-holtek-mouse.o
 diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
 index da52279..ec88fdb 100644
 --- a/drivers/hid/hid-core.c
 +++ b/drivers/hid/hid-core.c
 @@ -1827,6 +1827,7 @@ static const struct hid_device_id 
 hid_have_special_driver[] = {
   { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, 
 USB_DEVICE_ID_WIRELESS_OPTICAL_DESKTOP_3_0) },
   { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_OFFICE_KB) },
   { HID_USB_DEVICE(USB_VENDOR_ID_MONTEREY, USB_DEVICE_ID_GENIUS_KB29E) },
 + { HID_USB_DEVICE(USB_VENDOR_ID_MSI, USB_DEVICE_ID_MSI_GT683R_LED_PANEL) 
 },
   { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN) 
 },
   { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, 
 USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_1) },
   { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, 
 USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_2) },
 diff --git a/drivers/hid/hid-gt683r.c b/drivers/hid/hid-gt683r.c
 new file mode 100644
 index 000..04e4cc2
 --- /dev/null
 +++ b/drivers/hid/hid-gt683r.c
 @@ -0,0 +1,320 @@
 +/*
 + * MSI GT683R led driver
 + *
 + * Copyright (c) 2014 Janne Kanniainen janne.kanniai...@gmail.com
 + *
 + * This program is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU General Public License as
 + * published by the Free Software Foundation; either version 2 of
 + * the License, or (at your option) any later version.
 + *
 + * This program is distributed in the hope that it will be useful,
 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 + * GNU General Public License for more details.
 + *
 + */
 +
 +#include linux/device.h
 +#include linux/hid.h
 +#include linux/kernel.h
 +#include linux/leds.h
 +#include linux/module.h
 +
 +#include hid-ids.h
 +
 +#define GT683R_LED_BACK  BIT(0)
 +#define GT683R_LED_SIDE  BIT(1)
 +#define GT683R_LED_FRONT BIT(2)
 +
 +#define GT683R_BUFFER_SIZE   8
 +
 +/*
 + * GT683R_LED_OFF: all LEDs are off
 + * GT683R_LED_AUDIO: the status of LEDs depends
 + * on sound level
 + * GT683R_LED_BREATHING: LEDs brightness varies
 + * at human breathing rate
 + * GT683R_LED_NORMAL: LEDs are on
 + */
 +enum gt683r_led_state {
 + GT683R_LED_OFF = 0,
 + GT683R_LED_AUDIO = 2,
 + GT683R_LED_BREATHING = 3,
 + GT683R_LED_NORMAL = 5
 +};
 +
 +struct gt683r_led {
 + struct hid_device *hdev;
 + struct led_classdev led_dev_back;
 + 

[PATCH v4] leds: USB: HID: Add support for MSI GT683R led panels

2014-06-11 Thread Janne Kanniainen
This driver adds support for USB controlled led panels that exists in MSI 
GT683R laptop

Signed-off-by: Janne Kanniainen janne.kanniai...@gmail.com
---
Changes in v2:
- sorted headers to alphabetic order
- using devm_kzalloc
- using BIT(n)
- using usb_control_msg instead of usb_submit_urb
- removing unneeded code

Changes in v3:
- implemented as HID device
- some cleanups and bug fixes

Changes in v4:
- more cleanups
- support for selecting leds
- support for selecting status

 drivers/hid/Kconfig |  11 ++
 drivers/hid/Makefile|   1 +
 drivers/hid/hid-core.c  |   1 +
 drivers/hid/hid-gt683r.c| 320 
 drivers/hid/hid-ids.h   |   2 +-
 drivers/hid/usbhid/hid-quirks.c |   2 +-
 6 files changed, 335 insertions(+), 2 deletions(-)
 create mode 100644 drivers/hid/hid-gt683r.c

diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
index 7af9d0b..d93e0ae 100644
--- a/drivers/hid/Kconfig
+++ b/drivers/hid/Kconfig
@@ -261,6 +261,17 @@ config HOLTEK_FF
  Say Y here if you have a Holtek On Line Grip based game controller
  and want to have force feedback support for it.
 
+config HID_GT683R
+   tristate MSI GT68xR LED support
+   depends on LEDS_CLASS  USB_HID
+   ---help---
+   Say Y here if you want to enable support for the MSI GT68xR LEDS
+
+   This driver support following states normal, breathing and audio.
+   You can also select which leds you want to enable.
+   Currently the following devices are know to be supported:
+   - MSI GT683R
+
 config HID_HUION
tristate Huion tablets
depends on USB_HID
diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
index fc712dd..7129311 100644
--- a/drivers/hid/Makefile
+++ b/drivers/hid/Makefile
@@ -48,6 +48,7 @@ obj-$(CONFIG_HID_EMS_FF)  += hid-emsff.o
 obj-$(CONFIG_HID_ELECOM)   += hid-elecom.o
 obj-$(CONFIG_HID_ELO)  += hid-elo.o
 obj-$(CONFIG_HID_EZKEY)+= hid-ezkey.o
+obj-$(CONFIG_HID_GT683R)   += hid-gt683r.o
 obj-$(CONFIG_HID_GYRATION) += hid-gyration.o
 obj-$(CONFIG_HID_HOLTEK)   += hid-holtek-kbd.o
 obj-$(CONFIG_HID_HOLTEK)   += hid-holtek-mouse.o
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index da52279..ec88fdb 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -1827,6 +1827,7 @@ static const struct hid_device_id 
hid_have_special_driver[] = {
{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, 
USB_DEVICE_ID_WIRELESS_OPTICAL_DESKTOP_3_0) },
{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_OFFICE_KB) },
{ HID_USB_DEVICE(USB_VENDOR_ID_MONTEREY, USB_DEVICE_ID_GENIUS_KB29E) },
+   { HID_USB_DEVICE(USB_VENDOR_ID_MSI, USB_DEVICE_ID_MSI_GT683R_LED_PANEL) 
},
{ HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN) 
},
{ HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, 
USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_1) },
{ HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, 
USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_2) },
diff --git a/drivers/hid/hid-gt683r.c b/drivers/hid/hid-gt683r.c
new file mode 100644
index 000..04e4cc2
--- /dev/null
+++ b/drivers/hid/hid-gt683r.c
@@ -0,0 +1,320 @@
+/*
+ * MSI GT683R led driver
+ *
+ * Copyright (c) 2014 Janne Kanniainen janne.kanniai...@gmail.com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include linux/device.h
+#include linux/hid.h
+#include linux/kernel.h
+#include linux/leds.h
+#include linux/module.h
+
+#include hid-ids.h
+
+#define GT683R_LED_BACKBIT(0)
+#define GT683R_LED_SIDEBIT(1)
+#define GT683R_LED_FRONT   BIT(2)
+
+#define GT683R_BUFFER_SIZE 8
+
+/*
+ * GT683R_LED_OFF: all LEDs are off
+ * GT683R_LED_AUDIO: the status of LEDs depends
+ * on sound level
+ * GT683R_LED_BREATHING: LEDs brightness varies
+ * at human breathing rate
+ * GT683R_LED_NORMAL: LEDs are on
+ */
+enum gt683r_led_state {
+   GT683R_LED_OFF = 0,
+   GT683R_LED_AUDIO = 2,
+   GT683R_LED_BREATHING = 3,
+   GT683R_LED_NORMAL = 5
+};
+
+struct gt683r_led {
+   struct hid_device *hdev;
+   struct led_classdev led_dev_back;
+   struct led_classdev led_dev_side;
+   struct led_classdev led_dev_front;
+   struct mutex lock;
+   struct mutex state_lock;
+   struct work_struct work;
+   enum