struct dvb_frontend *fe = dvbdev->priv;
        struct dvb_frontend_private *fepriv = fe->frontend_priv;
        struct dtv_frontend_properties *c = &fe->dtv_property_cache;
-       int err = 0;
-
-       struct dtv_properties *tvps = parg;
-       struct dtv_property *tvp = NULL;
-       int i;
+       int err, i;
 
        dev_dbg(fe->dvb->device, "%s:\n", __func__);
 
-       if (cmd == FE_SET_PROPERTY) {
-               dev_dbg(fe->dvb->device, "%s: properties.num = %d\n", __func__, tvps->num);
-               dev_dbg(fe->dvb->device, "%s: properties.props = %p\n", __func__, tvps->props);
+       switch(cmd) {
+       case FE_SET_PROPERTY: {
+               struct dtv_properties *tvps = parg;
+               struct dtv_property *tvp = NULL;
+
+               dev_dbg(fe->dvb->device, "%s: properties.num = %d\n",
+                       __func__, tvps->num);
+               dev_dbg(fe->dvb->device, "%s: properties.props = %p\n",
+                       __func__, tvps->props);
 
-               /* Put an arbitrary limit on the number of messages that can
-                * be sent at once */
-               if ((tvps->num == 0) || (tvps->num > DTV_IOCTL_MAX_MSGS))
+               /*
+                * Put an arbitrary limit on the number of messages that can
+                * be sent at once
+                */
+               if (!tvps->num || (tvps->num > DTV_IOCTL_MAX_MSGS))
                        return -EINVAL;
 
                tvp = memdup_user(tvps->props, tvps->num * sizeof(*tvp));
 
                for (i = 0; i < tvps->num; i++) {
                        err = dtv_property_process_set(fe, tvp + i, file);
-                       if (err < 0)
-                               goto out;
+                       if (err < 0) {
+                               kfree(tvp);
+                               return err;
+                       }
                        (tvp + i)->result = err;
                }
 
                if (c->state == DTV_TUNE)
                        dev_dbg(fe->dvb->device, "%s: Property cache is full, tuning\n", __func__);
 
-       } else if (cmd == FE_GET_PROPERTY) {
+               kfree(tvp);
+               break;
+       }
+       case FE_GET_PROPERTY: {
+               struct dtv_properties *tvps = parg;
+               struct dtv_property *tvp = NULL;
                struct dtv_frontend_properties getp = fe->dtv_property_cache;
 
-               dev_dbg(fe->dvb->device, "%s: properties.num = %d\n", __func__, tvps->num);
-               dev_dbg(fe->dvb->device, "%s: properties.props = %p\n", __func__, tvps->props);
+               dev_dbg(fe->dvb->device, "%s: properties.num = %d\n",
+                       __func__, tvps->num);
+               dev_dbg(fe->dvb->device, "%s: properties.props = %p\n",
+                       __func__, tvps->props);
 
-               /* Put an arbitrary limit on the number of messages that can
-                * be sent at once */
-               if ((tvps->num == 0) || (tvps->num > DTV_IOCTL_MAX_MSGS))
+               /*
+                * Put an arbitrary limit on the number of messages that can
+                * be sent at once
+                */
+               if (!tvps->num || (tvps->num > DTV_IOCTL_MAX_MSGS))
                        return -EINVAL;
 
                tvp = memdup_user(tvps->props, tvps->num * sizeof(*tvp));
                 */
                if (fepriv->state != FESTATE_IDLE) {
                        err = dtv_get_frontend(fe, &getp, NULL);
-                       if (err < 0)
-                               goto out;
+                       if (err < 0) {
+                               kfree(tvp);
+                               return err;
+                       }
                }
                for (i = 0; i < tvps->num; i++) {
                        err = dtv_property_process_get(fe, &getp, tvp + i, file);
-                       if (err < 0)
-                               goto out;
+                       if (err < 0) {
+                               kfree(tvp);
+                               return err;
+                       }
                        (tvp + i)->result = err;
                }
 
                if (copy_to_user((void __user *)tvps->props, tvp,
                                 tvps->num * sizeof(struct dtv_property))) {
-                       err = -EFAULT;
-                       goto out;
+                       kfree(tvp);
+                       return -EFAULT;
                }
-
-       } else
-               err = -EOPNOTSUPP;
-
-out:
-       kfree(tvp);
-       return err;
+               kfree(tvp);
+               break;
+       }
+       default:
+               return -ENOTSUPP;
+       } /* switch */
+       return 0;
 }
 
 static int dtv_set_frontend(struct dvb_frontend *fe)