+ /* Check for types (and index) of channel groups. */
+ ret = get_cg_index(sdi, cg, &cg_type, &logic_idx, &analog_idx);
+ if (cg && ret != SR_OK)
+ return SR_ERR_ARG;
+
+ /* Handle requests for the "Logic" channel group. */
+ if (cg && cg_type == SR_CHANNEL_LOGIC) {
+ /* TODO */
+ return SR_ERR_NA;
+ }
+
+ /* Handle requests for the "PWMx" channel groups. */
+ if (cg && cg_type == SR_CHANNEL_ANALOG) {
+ pwm = &devc->pwm_setting[analog_idx];
+ switch (key) {
+ case SR_CONF_ENABLED:
+ pwm->enabled = g_variant_get_boolean(data);
+ ret = la2016_write_pwm_config(sdi, analog_idx);
+ if (ret != SR_OK)
+ return ret;
+ break;
+ case SR_CONF_OUTPUT_FREQUENCY:
+ pwm->freq = g_variant_get_double(data);
+ ret = la2016_write_pwm_config(sdi, analog_idx);
+ if (ret != SR_OK)
+ return ret;
+ break;
+ case SR_CONF_DUTY_CYCLE:
+ pwm->duty = g_variant_get_double(data);
+ ret = la2016_write_pwm_config(sdi, analog_idx);
+ if (ret != SR_OK)
+ return ret;
+ break;
+ default:
+ return SR_ERR_NA;
+ }
+ return SR_OK;
+ }
+