+ case 16: {
+ uint16_t value;
+ ret = sscanf(param[2], "%hi", &value);
+ if (ret == EOF || ret == 0)
+ break;
+ value = cpu_to_be16(value);
+ ret = port->set(port, &value, sizeof(value));
+ if (ret == FAILURE)
+ return -CMDERR_WRPERM;
+ return cmd_opchar_replong(cmd_io, param, be16_to_cpu(value), 0, 16);
+ }
+ case 24: {
+ uint32_t value;
+ ret = sscanf(param[2], "%i", &value);
+ if (ret == EOF || ret == 0 || (value & 0xff000000))
+ return -CMDERR_BADPAR;
+
+ char v[3] = { (value >> 16) & 0xff, (value >> 8) & 0xff, (value >> 0) & 0xff };
+
+ ret = port->set(port, &v, sizeof(v));
+ if (ret == FAILURE)
+ return -CMDERR_WRPERM;
+ value = v[0] << 16 | v[1] << 8 | v[2];
+ return cmd_opchar_replong(cmd_io, param, value, 0, 16);
+ }
+ case 32: {
+ uint32_t value;
+ ret = sscanf(param[2], "%i", &value);
+ if (ret == EOF || ret == 0)
+ return -CMDERR_BADPAR;
+
+ char v[4] = { (value >> 24) & 0xff, (value >> 16) & 0xff, (value >> 8) & 0xff, (value >> 0) & 0xff };
+
+ ret = port->set(port, &v, sizeof(v));
+ if (ret == FAILURE)
+ return -CMDERR_WRPERM;
+ value = v[0] << 24 | v[1] << 16 | v[2] << 8 | v[3];
+ return cmd_opchar_replong(cmd_io, param, value, 0, 16);
+ }
+ default:
+ rpp_sci_printf("Unsupported bits-per-channel value: %d\n", port->bpch);
+ return -CMDERR_NODEV;
+ }
+ } else { /* Get values from port */
+ if (!port->get)