提交 5df2def5 编写于 作者: H Hans Verkuil 提交者: Mauro Carvalho Chehab

[media] si470x: add check to test if this is really a si470x

Signed-off-by: NHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: NMauro Carvalho Chehab <m.chehab@samsung.com>
上级 567e2e96
...@@ -635,6 +635,30 @@ static int si470x_usb_driver_probe(struct usb_interface *intf, ...@@ -635,6 +635,30 @@ static int si470x_usb_driver_probe(struct usb_interface *intf,
} }
radio->v4l2_dev.release = si470x_usb_release; radio->v4l2_dev.release = si470x_usb_release;
/*
* The si470x SiLabs reference design uses the same USB IDs as
* 'Thanko's Raremono' si4734 based receiver. So check here which we
* have: attempt to read the device ID from the si470x: the lower 12
* bits should be 0x0242 for the si470x.
*
* We use this check to determine which device we are dealing with.
*/
if (id->idVendor == 0x10c4 && id->idProduct == 0x818a) {
retval = usb_control_msg(radio->usbdev,
usb_rcvctrlpipe(radio->usbdev, 0),
HID_REQ_GET_REPORT,
USB_TYPE_CLASS | USB_RECIP_INTERFACE | USB_DIR_IN,
1, 2,
radio->usb_buf, 3, 500);
if (retval != 3 ||
(get_unaligned_be16(&radio->usb_buf[1]) & 0xfff) != 0x0242) {
dev_info(&intf->dev, "this is not a si470x device.\n");
retval = -ENODEV;
goto err_urb;
}
}
retval = v4l2_device_register(&intf->dev, &radio->v4l2_dev); retval = v4l2_device_register(&intf->dev, &radio->v4l2_dev);
if (retval < 0) { if (retval < 0) {
dev_err(&intf->dev, "couldn't register v4l2_device\n"); dev_err(&intf->dev, "couldn't register v4l2_device\n");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册