Philips/Sagemcom PicoPix projectors require that the DEVINFO packet is
the first one to be sent to the device in order for it to successfully
return the correct device information.
Call am7xxx_get_device_info() from am7xxx_open_device() to fulfill the
requirement from above. The device info will be cached by
am7xxx_get_device_info() and further calls to the latter will return the
correct data too.
ret = scan_devices(ctx, SCAN_OP_OPEN_DEVICE, device_index, dev);
if (ret < 0) {
errno = ENODEV;
ret = scan_devices(ctx, SCAN_OP_OPEN_DEVICE, device_index, dev);
if (ret < 0) {
errno = ENODEV;
} else if (ret > 0) {
warning(ctx, "device %d already open\n", device_index);
errno = EBUSY;
ret = -EBUSY;
} else if (ret > 0) {
warning(ctx, "device %d already open\n", device_index);
errno = EBUSY;
ret = -EBUSY;
+ /* Philips/Sagemcom PicoPix projectors require that the DEVINFO packet
+ * is the first one to be sent to the device in order for it to
+ * successfully return the correct device information.
+ *
+ * So, if there is not a cached version of it (from a previous open),
+ * we ask for device info at open time,
+ */
+ if ((*dev)->device_info == NULL) {
+ ret = am7xxx_get_device_info(*dev, NULL);
+ if (ret < 0)
+ error(ctx, "cannot get device info\n");
+ }
+
+out: