int change = 0;
        void *new_data;
 
-       if (op_flag > 0) {
+       if (op_flag == SNDRV_CTL_TLV_OP_WRITE) {
                if (size > 1024 * 128)  /* sane value */
                        return -EINVAL;
 
                goto __kctl_end;
        }
        vd = &kctl->vd[tlv.numid - kctl->id.numid];
-       if ((op_flag == 0 && (vd->access & SNDRV_CTL_ELEM_ACCESS_TLV_READ) == 0) ||
-           (op_flag > 0 && (vd->access & SNDRV_CTL_ELEM_ACCESS_TLV_WRITE) == 0) ||
-           (op_flag < 0 && (vd->access & SNDRV_CTL_ELEM_ACCESS_TLV_COMMAND) == 0)) {
+       if ((op_flag == SNDRV_CTL_TLV_OP_READ &&
+            (vd->access & SNDRV_CTL_ELEM_ACCESS_TLV_READ) == 0) ||
+           (op_flag == SNDRV_CTL_TLV_OP_WRITE &&
+            (vd->access & SNDRV_CTL_ELEM_ACCESS_TLV_WRITE) == 0) ||
+           (op_flag == SNDRV_CTL_TLV_OP_CMD &&
+            (vd->access & SNDRV_CTL_ELEM_ACCESS_TLV_COMMAND) == 0)) {
                err = -ENXIO;
                goto __kctl_end;
        }
                        return 0;
                }
        } else {
-               if (op_flag) {
+               if (op_flag != SNDRV_CTL_ELEM_ACCESS_TLV_READ) {
                        err = -ENXIO;
                        goto __kctl_end;
                }