am7xxx: simplify the device info caching operation in am7xxx_open_device()
[libam7xxx.git] / src / am7xxx.c
index 2d7b890..84d7e9c 100644 (file)
@@ -1179,14 +1179,14 @@ AM7XXX_PUBLIC int am7xxx_open_device(am7xxx_context *ctx, am7xxx_device **dev,
         * 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,
+        * NOTE: am7xxx_get_device_info() will fetch the actual device info
+        * from the device only the very first time it's called for a given
+        * device, otherwise, it'll return a cached version of the device info
+        * (from a previous call to am7xxx_open_device(), for instance).
         */
-       if ((*dev)->device_info == NULL) {
-               ret = am7xxx_get_device_info(*dev, NULL);
-               if (ret < 0)
-                       error(ctx, "cannot get device info\n");
-       }
+       ret = am7xxx_get_device_info(*dev, NULL);
+       if (ret < 0)
+               error(ctx, "cannot get device info\n");
 
 out:
        return ret;
@@ -1213,10 +1213,9 @@ AM7XXX_PUBLIC int am7xxx_get_device_info(am7xxx_device *dev,
        int ret;
        struct am7xxx_header h;
 
-       if (dev->device_info) {
-               memcpy(device_info, dev->device_info, sizeof(*device_info));
-               return 0;
-       }
+       /* if there is a cached copy of the device info, just return that */
+       if (dev->device_info)
+               goto return_value;
 
        ret = send_command(dev, AM7XXX_PACKET_TYPE_DEVINFO);
        if (ret < 0)
@@ -1250,6 +1249,9 @@ AM7XXX_PUBLIC int am7xxx_get_device_info(am7xxx_device *dev,
        dev->device_info->unknown1 = h.header_data.devinfo.unknown1;
 #endif
 
+return_value:
+       if (device_info)
+               memcpy(device_info, dev->device_info, sizeof(*device_info));
        return 0;
 }