The sd argument of this macro can be a more complex expression. Since it
is used 5 times in the macro it can be evaluated that many times as well.
So assign it to a temp variable in the beginning and use that instead.
This also avoids any potential side-effects of evaluating sd.
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
  */
 #define v4l2_subdev_call(sd, o, f, args...)                            \
        ({                                                              \
+               struct v4l2_subdev *__sd = (sd);                        \
                int __result;                                           \
-               if (!(sd))                                              \
+               if (!__sd)                                              \
                        __result = -ENODEV;                             \
-               else if (!((sd)->ops->o && (sd)->ops->o->f))            \
+               else if (!(__sd->ops->o && __sd->ops->o->f))            \
                        __result = -ENOIOCTLCMD;                        \
                else                                                    \
-                       __result = (sd)->ops->o->f((sd), ##args);       \
+                       __result = __sd->ops->o->f(__sd, ##args);       \
                __result;                                               \
        })