+static peripheral_pwm_h _init_pwm(int default_pwm_pin, char *key)
+{
+ peripheral_pwm_h pwm;
+ int pin;
+
+ bool modified = config_get_int_with_default(CONFIG_GRP_RPI, key, default_pwm_pin, &pin);
+ _D("PWN: %d, DUTY: %u, period: %u", pin, (unsigned)2e6, (unsigned)2e7);
+
+ if (modified) {
+ config_save();
+ }
+
+ int ret = peripheral_pwm_open(1, pin, &pwm);
+ retv_error_message(ret != PERIPHERAL_ERROR_NONE, ret, NULL);
+
+ ret = peripheral_pwm_set_period(pwm, (unsigned)2e7);
+ retv_error_message(ret != PERIPHERAL_ERROR_NONE, ret, NULL);
+
+ ret = peripheral_pwm_set_duty_cycle(pwm, (unsigned)2e6);
+ retv_error_message(ret != PERIPHERAL_ERROR_NONE, ret, NULL);
+
+ ret = peripheral_pwm_set_enabled(pwm, true);
+ retv_error_message(ret != PERIPHERAL_ERROR_NONE, ret, NULL);
+
+
+
+ return pwm;
+}
+
+static void _init_rgb_led(void)
+{
+ bool modified = config_get_int_with_default(CONFIG_GRP_RPI, CONFIG_KEY_RPI_USE_RGB_LED, 1, &s_info.use_rgb_led);
+ if (modified) {
+ config_save();
+ }
+
+ if (s_info.use_rgb_led) {
+ s_info.pwn_rgb_led[LED_COLOR_RED] = _init_pwm(DEFAULT_RGB_LED_RED, CONFIG_KEY_RPI_RGB_LED_RED);
+ s_info.pwn_rgb_led[LED_COLOR_GREEN] = _init_pwm(DEFAULT_RGB_LED_GREEN, CONFIG_KEY_RPI_RGB_LED_GREEN);
+ s_info.pwn_rgb_led[LED_COLOR_BLUE] = _init_pwm(DEFAULT_RGB_LED_BLUE, CONFIG_KEY_RPI_RGB_LED_BLUE);
+
+
+ peripheral_pwm_set_duty_cycle(s_info.pwn_rgb_led[LED_COLOR_RED], (unsigned)1e7);
+ }
+}
+