Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 33c3691e authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "leds: leds-qpnp-flash: add ordered workqueue in flash LED"

parents 2e8cfac4 aed024e8
Loading
Loading
Loading
Loading
+15 −4
Original line number Diff line number Diff line
@@ -225,6 +225,7 @@ struct qpnp_flash_led {
	struct pinctrl_state		*gpio_state_suspend;
	struct flash_node_data		*flash_node;
	struct power_supply		*battery_psy;
	struct workqueue_struct		*ordered_workq;
	struct mutex			flash_led_lock;
	struct qpnp_flash_led_buffer	*log;
	struct dentry			*dbgfs_root;
@@ -1479,16 +1480,16 @@ static void qpnp_flash_led_brightness_set(struct led_classdev *led_cdev,
				flash_node->prgm_current =
					led->flash_node[0].prgm_current +
					led->flash_node[1].prgm_current;
			schedule_work(&flash_node->work);
			return;
		}
	} else {
		if (value < FLASH_LED_MIN_CURRENT_MA && value != 0)
			value = FLASH_LED_MIN_CURRENT_MA;
		flash_node->prgm_current = value;
		schedule_work(&flash_node->work);
		return;
	}

	queue_work(led->ordered_workq, &flash_node->work);

	return;
}

static int qpnp_flash_led_init_settings(struct qpnp_flash_led *led)
@@ -2075,6 +2076,13 @@ static int qpnp_flash_led_probe(struct spmi_device *spmi)

	mutex_init(&led->flash_led_lock);

	led->ordered_workq = alloc_ordered_workqueue("flash_led_workqueue", 0);
	if (!led->ordered_workq) {
		dev_err(&spmi->dev,
			"Failed to allocate ordered workqueue\n");
		return -ENOMEM;
	}

	for_each_child_of_node(node, temp) {
		led->flash_node[i].cdev.brightness_set =
						qpnp_flash_led_brightness_set;
@@ -2184,6 +2192,8 @@ error_led_register:
	}
	debugfs_remove_recursive(root);
	mutex_destroy(&led->flash_led_lock);
	destroy_workqueue(led->ordered_workq);

	return rc;
}

@@ -2202,6 +2212,7 @@ static int qpnp_flash_led_remove(struct spmi_device *spmi)
	}
	debugfs_remove_recursive(led->dbgfs_root);
	mutex_destroy(&led->flash_led_lock);
	destroy_workqueue(led->ordered_workq);

	return 0;
}