static int mt6360_led_register()

in flash/leds-mt6360.c [520:604]


static int mt6360_led_register(struct device *parent, struct mt6360_led *led,
				struct led_init_data *init_data)
{
	struct mt6360_priv *priv = led->priv;
	struct v4l2_flash_config v4l2_config = {0};
	int ret;

	if ((led->led_no == MT6360_LED_ISNK1 ||
	     led->led_no == MT6360_VIRTUAL_MULTICOLOR) &&
	     (priv->leds_active & BIT(MT6360_LED_ISNK1))) {
		/*
		 * Change isink1 to SW control mode, disconnect it with
		 * charger state
		 */
		ret = regmap_update_bits(priv->regmap, MT6360_REG_RGBEN,
					 MT6360_CHRINDSEL_MASK,
					 MT6360_CHRINDSEL_MASK);
		if (ret) {
			dev_err(parent, "Failed to config ISNK1 to SW mode\n");
			return ret;
		}
	}

	switch (led->led_no) {
	case MT6360_VIRTUAL_MULTICOLOR:
		ret = mt6360_mc_brightness_set(&led->mc.led_cdev, LED_OFF);
		if (ret) {
			dev_err(parent,
				"Failed to init multicolor brightness\n");
			return ret;
		}

		ret = devm_led_classdev_multicolor_register_ext(parent,
							   &led->mc, init_data);
		if (ret) {
			dev_err(parent, "Couldn't register multicolor\n");
			return ret;
		}
		break;
	case MT6360_LED_ISNK1 ... MT6360_LED_ISNKML:
		ret = mt6360_isnk_init_default_state(led);
		if (ret) {
			dev_err(parent, "Failed to init %d isnk state\n",
				led->led_no);
			return ret;
		}

		ret = devm_led_classdev_register_ext(parent, &led->isnk,
						     init_data);
		if (ret) {
			dev_err(parent, "Couldn't register isink %d\n",
				led->led_no);
			return ret;
		}
		break;
	default:
		ret = mt6360_flash_init_default_state(led);
		if (ret) {
			dev_err(parent, "Failed to init %d flash state\n",
				led->led_no);
			return ret;
		}

		ret = devm_led_classdev_flash_register_ext(parent, &led->flash,
							   init_data);
		if (ret) {
			dev_err(parent, "Couldn't register flash %d\n",
				led->led_no);
			return ret;
		}

		mt6360_init_v4l2_flash_config(led, &v4l2_config);
		led->v4l2_flash = v4l2_flash_init(parent, init_data->fwnode,
						  &led->flash,
						  &v4l2_flash_ops,
						  &v4l2_config);
		if (IS_ERR(led->v4l2_flash)) {
			dev_err(parent, "Failed to register %d v4l2 sd\n",
				led->led_no);
			return PTR_ERR(led->v4l2_flash);
		}
	}

	return 0;
}