+ for (int set = 0; set < 4; set++) {
+ char set_name[16] = {0};
+ u32 set_config[4];
+ int leds_in_this_set = 0;
+
+ /* Reset LED set configuration */
+ sw_w32(0, RTL930X_LED_SETX_0_CTRL(set));
+ sw_w32(0, RTL930X_LED_SETX_1_CTRL(set));
+
+ /**
+ * Each led set has 4 number of leds, and each LED is configured with 16 bits
+ * So each 32bit register holds configuration for 2 leds
+ * And therefore each set requires 2 registers for configuring 4 LEDs
+ *
+ */
+ sprintf(set_name, "led_set%d", set);
+ leds_in_this_set = of_property_count_u32_elems(node, set_name);
+
+ if (leds_in_this_set == 0 || leds_in_this_set > sizeof(set_config)) {
+ pr_err("%s led_set configuration invalid skipping over this set\n", __func__);
+ continue;
+ }
+
+ if (of_property_read_u32_array(node, set_name, set_config, leds_in_this_set)) {
+ break;
+ }
+
+ /* Write configuration as per number of LEDs */
+ for (int i=0, led = leds_in_this_set-1; led >= 0; led--,i++) {
+ sw_w32_mask(0xffff << RTL930X_LED_SET_LEDX_SHIFT(led),
+ (0xffff & set_config[i]) << RTL930X_LED_SET_LEDX_SHIFT(led),
+ RTL930X_LED_SETX_LEDY(set, led));
+ }
+ }
+