For instance Philips/SagemoCm PicoPix PPX 2330 does not support power
modes and zoom modes, and the device even gets confused when trying to
use them; so for reliable operation it is better to just skip these
operations on such devices.
Thanks-to: Grégory Lemesre
#define debug(ctx, ...) log_message(ctx, AM7XXX_LOG_DEBUG, __func__, 0, __VA_ARGS__)
#define trace(ctx, ...) log_message(ctx, AM7XXX_LOG_TRACE, NULL, 0, __VA_ARGS__)
#define debug(ctx, ...) log_message(ctx, AM7XXX_LOG_DEBUG, __func__, 0, __VA_ARGS__)
#define trace(ctx, ...) log_message(ctx, AM7XXX_LOG_TRACE, NULL, 0, __VA_ARGS__)
+#define AM7XXX_QUIRK_NO_POWER_MODE (1 << 0)
+#define AM7XXX_QUIRK_NO_ZOOM_MODE (1 << 1)
+
struct am7xxx_usb_device_descriptor {
const char *name;
uint16_t vendor_id;
uint16_t product_id;
uint8_t configuration; /* The bConfigurationValue of the device */
uint8_t interface_number; /* The bInterfaceNumber of the device */
struct am7xxx_usb_device_descriptor {
const char *name;
uint16_t vendor_id;
uint16_t product_id;
uint8_t configuration; /* The bConfigurationValue of the device */
uint8_t interface_number; /* The bInterfaceNumber of the device */
};
static const struct am7xxx_usb_device_descriptor supported_devices[] = {
};
static const struct am7xxx_usb_device_descriptor supported_devices[] = {
.product_id = 0x0019,
.configuration = 1,
.interface_number = 0,
.product_id = 0x0019,
.configuration = 1,
.interface_number = 0,
+ .quirks = AM7XXX_QUIRK_NO_POWER_MODE | AM7XXX_QUIRK_NO_ZOOM_MODE,
+ if (dev->desc->quirks & AM7XXX_QUIRK_NO_POWER_MODE) {
+ debug(dev->ctx,
+ "setting power mode is unsupported on this device\n");
+ return 0;
+ }
+
switch(power) {
case AM7XXX_POWER_OFF:
h.header_data.power.bit2 = 0;
switch(power) {
case AM7XXX_POWER_OFF:
h.header_data.power.bit2 = 0;
+ if (dev->desc->quirks & AM7XXX_QUIRK_NO_ZOOM_MODE) {
+ debug(dev->ctx,
+ "setting zoom mode is unsupported on this device\n");
+ return 0;
+ }
+
switch(zoom) {
case AM7XXX_ZOOM_ORIGINAL:
h.header_data.zoom.bit1 = 0;
switch(zoom) {
case AM7XXX_ZOOM_ORIGINAL:
h.header_data.zoom.bit1 = 0;