From 0d31e557fdefb6edaa7172a77455fc104946e5b9 Mon Sep 17 00:00:00 2001 From: Antonio Ospite Date: Fri, 7 Dec 2012 11:59:32 +0100 Subject: [PATCH 1/1] am7xxx: make libam7xxx work with Philips/Sagemcom PPX projectors 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. --- src/am7xxx.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/am7xxx.c b/src/am7xxx.c index 632136a..96fd2b9 100644 --- a/src/am7xxx.c +++ b/src/am7xxx.c @@ -703,12 +703,28 @@ AM7XXX_PUBLIC int am7xxx_open_device(am7xxx_context *ctx, am7xxx_device **dev, ret = scan_devices(ctx, SCAN_OP_OPEN_DEVICE, device_index, dev); if (ret < 0) { errno = ENODEV; + goto out; } else if (ret > 0) { warning(ctx, "device %d already open\n", device_index); errno = EBUSY; ret = -EBUSY; + goto out; } + /* 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: return ret; } -- 2.1.4