|
@@ -40,6 +40,23 @@
|
|
|
|
|
|
#include "easycap.h"
|
|
|
|
|
|
+#define GET(X, Y, Z) do { \
|
|
|
+ int __rc; \
|
|
|
+ *(Z) = (u16)0; \
|
|
|
+ __rc = regget(X, Y, Z); \
|
|
|
+ if (0 > __rc) { \
|
|
|
+ JOT(8, ":-(%i\n", __LINE__); return __rc; \
|
|
|
+ } \
|
|
|
+} while (0)
|
|
|
+
|
|
|
+#define SET(X, Y, Z) do { \
|
|
|
+ int __rc; \
|
|
|
+ __rc = regset(X, Y, Z); \
|
|
|
+ if (0 > __rc) { \
|
|
|
+ JOT(8, ":-(%i\n", __LINE__); return __rc; \
|
|
|
+ } \
|
|
|
+} while (0)
|
|
|
+
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
static const struct stk1160config {
|
|
|
int reg;
|
|
@@ -238,7 +255,89 @@ static const struct saa7113config saa7113configNTSC[256] = {
|
|
|
|
|
|
{0xFF, 0xFF}
|
|
|
};
|
|
|
-/*--------------------------------------------------------------------------*/
|
|
|
+
|
|
|
+static int regget(struct usb_device *pusb_device, u16 index, void *pvoid)
|
|
|
+{
|
|
|
+ int rc;
|
|
|
+
|
|
|
+ if (!pusb_device)
|
|
|
+ return -ENODEV;
|
|
|
+
|
|
|
+ rc = usb_control_msg(pusb_device, usb_rcvctrlpipe(pusb_device, 0),
|
|
|
+ (u8)0x00,
|
|
|
+ (u8)(USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE),
|
|
|
+ (u16)0x00,
|
|
|
+ (u16)index,
|
|
|
+ (void *)pvoid,
|
|
|
+ sizeof(u8),
|
|
|
+ (int)50000);
|
|
|
+
|
|
|
+ return 0xFF & rc;
|
|
|
+}
|
|
|
+
|
|
|
+static int regset(struct usb_device *pusb_device, u16 index, u16 value)
|
|
|
+{
|
|
|
+ u16 igot;
|
|
|
+ int rc0, rc1;
|
|
|
+
|
|
|
+ if (!pusb_device)
|
|
|
+ return -ENODEV;
|
|
|
+
|
|
|
+ rc1 = 0; igot = 0;
|
|
|
+ rc0 = usb_control_msg(pusb_device, usb_sndctrlpipe(pusb_device, 0),
|
|
|
+ (u8)0x01,
|
|
|
+ (u8)(USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE),
|
|
|
+ (u16)value,
|
|
|
+ (u16)index,
|
|
|
+ NULL,
|
|
|
+ (u16)0,
|
|
|
+ (int)500);
|
|
|
+
|
|
|
+#ifdef NOREADBACK
|
|
|
+#
|
|
|
+#else
|
|
|
+ rc1 = usb_control_msg(pusb_device, usb_rcvctrlpipe(pusb_device, 0),
|
|
|
+ (u8)0x00,
|
|
|
+ (u8)(USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE),
|
|
|
+ (u16)0x00,
|
|
|
+ (u16)index,
|
|
|
+ (void *)&igot,
|
|
|
+ (u16)sizeof(u16),
|
|
|
+ (int)50000);
|
|
|
+ igot = 0xFF & igot;
|
|
|
+ switch (index) {
|
|
|
+ case 0x000:
|
|
|
+ case 0x500:
|
|
|
+ case 0x502:
|
|
|
+ case 0x503:
|
|
|
+ case 0x504:
|
|
|
+ case 0x506:
|
|
|
+ case 0x507:
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 0x204:
|
|
|
+ case 0x205:
|
|
|
+ case 0x350:
|
|
|
+ case 0x351:
|
|
|
+ if (0 != (0xFF & igot)) {
|
|
|
+ JOT(8, "unexpected 0x%02X for STK register 0x%03X\n",
|
|
|
+ igot, index);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ if ((0xFF & value) != (0xFF & igot)) {
|
|
|
+ JOT(8, "unexpected 0x%02X != 0x%02X "
|
|
|
+ "for STK register 0x%03X\n",
|
|
|
+ igot, value, index);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+#endif /* ! NOREADBACK*/
|
|
|
+
|
|
|
+ return (0 > rc0) ? rc0 : rc1;
|
|
|
+}
|
|
|
+/*****************************************************************************/
|
|
|
|
|
|
/****************************************************************************/
|
|
|
int
|
|
@@ -903,87 +1002,6 @@ for (k = 0; k < max; k++) {
|
|
|
return -1;
|
|
|
}
|
|
|
/****************************************************************************/
|
|
|
-int regset(struct usb_device *pusb_device, u16 index, u16 value)
|
|
|
-{
|
|
|
- u16 igot;
|
|
|
- int rc0, rc1;
|
|
|
-
|
|
|
- if (!pusb_device)
|
|
|
- return -ENODEV;
|
|
|
-
|
|
|
- rc1 = 0; igot = 0;
|
|
|
- rc0 = usb_control_msg(pusb_device, usb_sndctrlpipe(pusb_device, 0),
|
|
|
- (u8)0x01,
|
|
|
- (u8)(USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE),
|
|
|
- (u16)value,
|
|
|
- (u16)index,
|
|
|
- NULL,
|
|
|
- (u16)0,
|
|
|
- (int)500);
|
|
|
-
|
|
|
-#ifdef NOREADBACK
|
|
|
-#
|
|
|
-#else
|
|
|
- rc1 = usb_control_msg(pusb_device, usb_rcvctrlpipe(pusb_device, 0),
|
|
|
- (u8)0x00,
|
|
|
- (u8)(USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE),
|
|
|
- (u16)0x00,
|
|
|
- (u16)index,
|
|
|
- (void *)&igot,
|
|
|
- (u16)sizeof(u16),
|
|
|
- (int)50000);
|
|
|
- igot = 0xFF & igot;
|
|
|
- switch (index) {
|
|
|
- case 0x000:
|
|
|
- case 0x500:
|
|
|
- case 0x502:
|
|
|
- case 0x503:
|
|
|
- case 0x504:
|
|
|
- case 0x506:
|
|
|
- case 0x507:
|
|
|
- break;
|
|
|
-
|
|
|
- case 0x204:
|
|
|
- case 0x205:
|
|
|
- case 0x350:
|
|
|
- case 0x351:
|
|
|
- if (0 != (0xFF & igot)) {
|
|
|
- JOT(8, "unexpected 0x%02X for STK register 0x%03X\n",
|
|
|
- igot, index);
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- default:
|
|
|
- if ((0xFF & value) != (0xFF & igot)) {
|
|
|
- JOT(8, "unexpected 0x%02X != 0x%02X "
|
|
|
- "for STK register 0x%03X\n",
|
|
|
- igot, value, index);
|
|
|
- }
|
|
|
- break;
|
|
|
- }
|
|
|
-#endif /* ! NOREADBACK*/
|
|
|
-
|
|
|
- return (0 > rc0) ? rc0 : rc1;
|
|
|
-}
|
|
|
-/*****************************************************************************/
|
|
|
-int regget(struct usb_device *pusb_device, u16 index, void *pvoid)
|
|
|
-{
|
|
|
- int rc;
|
|
|
-
|
|
|
- if (!pusb_device)
|
|
|
- return -ENODEV;
|
|
|
-
|
|
|
- rc = usb_control_msg(pusb_device, usb_rcvctrlpipe(pusb_device, 0),
|
|
|
- (u8)0x00,
|
|
|
- (u8)(USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE),
|
|
|
- (u16)0x00,
|
|
|
- (u16)index,
|
|
|
- (void *)pvoid,
|
|
|
- sizeof(u8),
|
|
|
- (int)50000);
|
|
|
-
|
|
|
- return 0xFF & rc;
|
|
|
-}
|
|
|
/*****************************************************************************/
|
|
|
int
|
|
|
wakeup_device(struct usb_device *pusb_device)
|