static int asus_led_probe(struct i2c_client *client,
		const struct i2c_device_id *id)
{
	struct led_platform_data *pdata;
	struct led_info_priv *priv;
	struct i2c_adapter *adapter;
	int i, ret = 0;

	LED_INFO("%s +++\n", __func__);
	/* check if the project support TCA6507 */
	if (Read_PROJ_ID()==PROJ_ID_ZS550ML_SEC) {
		LED_INFO("this project doesn't support tca6507, skip probe function.\n");
		return 0;
	}

	adapter = to_i2c_adapter(client->dev.parent);
	if (!i2c_check_functionality(adapter, I2C_FUNC_I2C))
		return -EIO;

	pdata = client->dev.platform_data;
	if (pdata && pdata->num_leds) {
		priv = kzalloc(sizeof_led_info_priv(pdata->num_leds),
				GFP_KERNEL);
		if (!priv)
			return -ENOMEM;

		priv->num_leds = pdata->num_leds;
		for (i = 0; i < priv->num_leds; i++) {
			priv->leds[i].cdev.name = pdata->leds[i].name;
			priv->leds[i].cdev.brightness_set = asus_led_set_brightness;
			priv->leds[i].cdev.brightness = LED_OFF;
			priv->leds[i].cdev.max_brightness = 255;
			ret = led_classdev_register(&client->dev, &priv->leds[i].cdev);
			if (ret < 0)
				LED_ERR("led_classdev_register led[%d] fail\n", i);
#ifdef CONTROL_LED
			disable_led_flag = 0;
			ret = device_create_file(priv->leds[i].cdev.dev, &dev_attr_disable);
			if (ret)
				LED_ERR("device_create_file disable in led[%d] fail\n", i);
#endif
			red_led_flag = 0;
			green_led_flag = 0;
			red_blink_flag = 0;
			green_blink_flag = 0;
			ret = device_create_file(priv->leds[i].cdev.dev, &dev_attr_blink);
			if (ret)
				LED_ERR("device_create_file blink in led[%d] fail\n", i);
		}
	}
	led_client = client;

	LED_INFO("%s ---\n", __func__);
	return 0;
}
static int asus_led_probe(struct platform_device *pdev)
{
	struct led_platform_data *pdata = pdev->dev.platform_data;
	struct led_info_priv *priv;
	int i, ret = 0;

	LED_info("%s start\n", __func__);

	if (pdata && pdata->num_leds) {
		priv = kzalloc(sizeof_led_info_priv(pdata->num_leds),
				GFP_KERNEL);
		if (!priv)
			return -ENOMEM;

		priv->num_leds = pdata->num_leds;
		for (i = 0; i < priv->num_leds; i++) {
			priv->leds[i].cdev.name = pdata->leds[i].name;
			priv->leds[i].cdev.brightness_set = asus_led_set_brightness;
			priv->leds[i].cdev.brightness = LED_OFF;
			priv->leds[i].cdev.max_brightness = 255;
			ret = led_classdev_register(&pdev->dev, &priv->leds[i].cdev);
			if (ret < 0)
				LED_err("led_classdev_register led[%d] fail\n", i);
#ifdef CONTROL_LED
			disable_led_flag = 0;
			ret = device_create_file(priv->leds[i].cdev.dev, &dev_attr_disable);
			if (ret)
				LED_err("device_create_file disable in led[%d] fail\n", i);
#endif
			red_led_flag = 0;
			green_led_flag = 0;
			red_blink_flag = 0;
			green_blink_flag = 0;
			ret = device_create_file(priv->leds[i].cdev.dev, &dev_attr_blink);
			if (ret)
				LED_err("device_create_file blink in led[%d] fail\n", i);
		}
	}

	platform_set_drvdata(pdev, priv);

	/*request gpio*/
	ret = gpio_request(RED_LED_GPIO, "led_red");
	if (ret < 0) {
		LED_err("request RED LED(%d) fail, ret=%d\n", RED_LED_GPIO, ret);
	}
	ret = gpio_request(GREEN_LED_GPIO, "led_green");
	if (ret < 0) {
		LED_err("request GREEN LED(%d) fail, ret=%d\n", GREEN_LED_GPIO, ret);
	}

	LED_info("%s end\n", __func__);
	return 0;
}