Re: Turn Sony motion controller into RGB led

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 9 Apr 2015, Pavel Machek wrote:

> I did not yet figure out how to get sensor data from the controller,
> but it works rather well as a RGB led.

Thanks for the patch, Pavel.

> And yes, this probably would need some more cleanup, but I'm out of
> time now. Perhaps someone else can help...

Yeah, this definitely can't be applied as-is. A few of the most 
outstanding issues pointed out below.

> BTW what happened to the __u8->u8 conversion patch? That should go in AFAICT.

It hasn't been lost, still in my queue, but as it is of a very low 
priority, it hasn't been processed yet. Please make this one independent 
on it (i.e. do not intermix the type conversion with the actual RGB led 
patch).

> Signed-off-by: Pavel Machek <pavel@xxxxxx>
> 
> diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
> index 56ce8c2..a1c8b63 100644
> --- a/drivers/hid/hid-core.c
> +++ b/drivers/hid/hid-core.c
> @@ -1941,6 +1941,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
>  	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_BDREMOTE) },
>  	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) },
>  	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER) },
> +	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_MOTION_CONTROLLER) },	

Minor nit -- we generally try to keep this list alphabetically sorted, 
although even before your change USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER 
is misplaced. Would be nice to have it fixed while you are at it.

[ ... snip ... ]
> -static __u8 *ps3remote_fixup(struct hid_device *hdev, __u8 *rdesc,
> +static int motion_set_leds(struct hid_device *hdev, u8 r, u8 g, u8 b)
> +{
> +	int ret;
> +	struct motion_leds *buf = kzalloc(sizeof(struct motion_leds), GFP_KERNEL);

kzalloc() failure handling missing.

> +
> +	if (sizeof(struct motion_leds) != 7) {

What is this trying to achieve? What error is it protecting against?

> +		printk("Struct has bad size\n");

This needs to be prefixed by the driver / device identification (pr_/dev_ 
macros).

> +	}
> +
> +#define SET_LEDS 0x02

Please put this outside of the function scope.

> +	buf->type = SET_LEDS;
> +	buf->r = r;
> +	buf->g = g;
> +	buf->b = b;	
> +	
> +	ret = hid_hw_output_report(hdev, buf, sizeof(struct motion_leds));
> +	printk("motion: set leds %d\n", ret);

Again, please make this (and most of the other printk()s added by the 
patch) driver/device specific (and dependent on a debug option).

[ ... snip ... ]
> +static void motion_state_worker(struct work_struct *work)
> +{
> +	struct sony_sc *sc = container_of(work, struct sony_sc, state_worker);
> +	struct hid_device *hdev = sc->hdev;
> +
> +	motion_set_leds(hdev, sc->led_state[0], sc->led_state[1], sc->led_state[2]);
> +
> +//	schedule_delayed_work(&sc->state_worker, HZ*3);

The work gets scheduled whenever sony_set_leds() is called, so this can be 
just removed, right?

[ ... snip ... ]
> diff --git a/drivers/hid/hidraw.c b/drivers/hid/hidraw.c
> index 9c2d7c2..1342b71 100644
> --- a/drivers/hid/hidraw.c
> +++ b/drivers/hid/hidraw.c
> @@ -151,7 +151,14 @@ static ssize_t hidraw_send_report(struct file *file, const char __user *buffer,
>  
>  	if ((report_type == HID_OUTPUT_REPORT) &&
>  	    !(dev->quirks & HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP)) {
> +		printk("hid_hw_output_report(dev, buf, %d_REPORT);\n", count);
>  		ret = hid_hw_output_report(dev, buf, count);
> +		{
> +			int i;
> +			for (i=0; i<count; i++)
> +				printk("%02x ", buf[i]);
> +			printk("\n");
> +		}
[ ... snip ... ]
> +	printk("hid_hw_raw_request(dev, %02x, buf, %d, %d, HID_REQ_SET_REPORT);\n",
> +	       buf[0], count, report_type);
> +	{
> +		int i;
> +		for (i=0; i<count; i++)
> +			printk("%02x ", buf[i]);
> +		printk("\n");
> +	}
> +

Both these need to go.

Maybe Frank or someone else would be willing to work on improving this 
patch. I am not applying it in this form.

Thanks,

-- 
Jiri Kosina
SUSE Labs
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux