Example #1
0
static void lm3533_set_main_current_level(struct i2c_client *client, int level)
{
	struct lm3533_device *dev = i2c_get_clientdata(client);
	int cal_value = 0;
	int min_brightness = dev->min_brightness;
	int max_brightness = dev->max_brightness;
	int max_current = dev->max_current;
	int gpio = dev->hwen_gpio;

	pr_debug("lm3533_level[BL]:%d \n", level);

	//dev->cur_main_lcd_level = level;
	//dev->saved_main_lcd_level = dev->cur_main_lcd_level;

	mutex_lock(&lm3533dev->bl_mutex);

	if(level!= 0){
		gpio_set_value(gpio, 1);
		//cal_value = level;
		/*if(level >= 1 && level <= 255)
		{
			cal_value = (((level*2250-30*2250)/225)*251 + 4*2250)/2250; //input min=30, Max255,,, Output min 20 ; max 255
			if(cal_value < 165)
				cal_value = (cal_value*108)/100 - 38;
			else
				cal_value = (cal_value*150)/100 - 100;
		}
		else{
			mdelay(1);
			return;
		}*/
		if (level < 0)	level=0;
		if (level >255)	level=255;

		cal_value=default_160nit_53percent_lut[level];

		if (cal_value < LM3533_BL_MIN_BRIGHTNESS){
			cal_value = LM3533_BL_MIN_BRIGHTNESS;
		}
		else if (cal_value > LM3533_BL_MAX_BRIGHTNESS)
		{
			cal_value = LM3533_BL_MAX_BRIGHTNESS;
		}
#if defined(CONFIG_MACH_X3)
		//jude84.kim For Milky U and Factorymode
		if((is_tegra_batteryexistWhenBoot() != 1) && (charging_mode == CHARGING_FACTORY)){
			cal_value = LM3533_BL_MIN_BRIGHTNESS;
		}
#endif
		lm3533_bl_write_reg(client, 0x1F, dev->cur_maxcurrent);
		lm3533_bl_write_reg(client, 0x40, cal_value);
	}
	else if(level == 0){
		cal_value = level;
		lm3533_bl_write_reg(client, 0x1F, dev->cur_maxcurrent);
		lm3533_bl_write_reg(client, 0x40, cal_value);
	}
	mutex_unlock(&lm3533dev->bl_mutex);
	mdelay(1);
}
Example #2
0
static void lm3533_set_main_current_level(struct i2c_client *client, int level)
{
	struct lm3533_device *dev = i2c_get_clientdata(client);
	int cal_value = 0;
	int min_brightness = dev->min_brightness;
	int max_brightness = dev->max_brightness;
	int max_current = dev->max_current;
	int gpio = dev->hwen_gpio;

	printk("lm3533_set_main_current_level *** level:%d \n", level);
	
	mutex_lock(&lm3533dev->bl_mutex);

	if(level!= 0){
		gpio_set_value(gpio, 1);
	
		if (level < 0)	level=0;
		if (level >255)	level=255;

		
		cal_value=default_77_lut[level];

		if (cal_value < LM3533_BL_MIN_BRIGHTNESS){
			cal_value = LM3533_BL_MIN_BRIGHTNESS;
		}
		else if (cal_value > LM3533_BL_MAX_BRIGHTNESS)
		{
			cal_value = LM3533_BL_MAX_BRIGHTNESS;
		}
#if defined(CONFIG_MACH_X3) && defined(CONFIG_ARCH_TEGRA_3x_SOC)
		
		if((is_tegra_batteryexistWhenBoot() != 1) && (charging_mode == CHARGING_FACTORY)){
			cal_value = LM3533_BL_MIN_BRIGHTNESS;
		}
#endif
		lm3533_bl_write_reg(client, 0x40, cal_value);
	}
	else if(level == 0){
		cal_value = level;
		lm3533_bl_write_reg(client, 0x40, cal_value);
	}
	mutex_unlock(&lm3533dev->bl_mutex);
	mdelay(1);
}
Example #3
0
static __devinit int max8971_probe(struct i2c_client *client, 
				   const struct i2c_device_id *id)
{

	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
	struct max8971_chip *chip;
	int ret;


	dev_info(&client->dev, "%s..\n", __func__);

	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE)) {
		dev_err(&client->dev, "%s i2c check failed..\n", __func__);
		return -EIO;
	}

	chip = kzalloc(sizeof(*chip), GFP_KERNEL);
	if (!chip) {
		dev_err(&client->dev, "Memory allocation failed\n");
		return -ENOMEM;
	}

	/*                                              */
	max8971_chg = chip;
	/*                                              */

#ifdef MAX8971_TOPOFF_WORKAROUND
	dev_info(&client->dev, "Starting delayed workd queue..\n");
	INIT_DELAYED_WORK(&chip->topoff_work, max8971_topoff_work);
	//printk(KERN_DEBUG "%s(%d)\n", __func__, __LINE__);
	chip->start_topoff_work = 0;
	chip->prev_chg_dtl = 0;
#endif
	chip->client	= client;
	chip->pdata	= client->dev.platform_data;

	i2c_set_clientdata(client, chip);

	if(chip->pdata->gpio_init)
		chip->pdata->gpio_init();
	else
		printk("max8971_probe : Failed to gpio init\n");
	
	chip->charger.name		= "charger";
	chip->charger.type		= POWER_SUPPLY_TYPE_BATTERY;
	chip->charger.properties	= max8971_charger_props;
	chip->charger.num_properties 	= ARRAY_SIZE(max8971_charger_props);
	chip->charger.get_property	= max8971_charger_get_property;
	chip->charger.set_property	= max8971_charger_set_property;

	ret = power_supply_register(&client->dev, &chip->charger);
	if (ret) {
		dev_err(&client->dev, 
				"power supply register failed : %d\n", ret);
		goto err_power_supply_register;
	}
	
	//INIT_WORK(&max8971_wq, max8971_charger_wq);

	//kkk_test
	INIT_DELAYED_WORK_DEFERRABLE(&chip->monitor_work, lge_charger_setting_work);
	//schedule_delayed_work(&chip->monitor_work, 0);

	if(is_tegra_batteryexistWhenBoot() == 1)
	{
	   	 ret = request_threaded_irq(client->irq, NULL, max8971_charger_wq,
	      		  IRQF_ONESHOT | IRQF_TRIGGER_LOW, client->name, chip);
		
		if (ret < 0) {
			printk(KERN_INFO "[max8971_probe] MAX8971_IRQB_GPIO set up failed!\n");
			free_irq(client->irq, &client->dev);
			return -ENOSYS;
		}
	}

/*
	chip->chg_online = 0;
	ret = max8971_read_reg(chip->client, MAX8971_REG_CHG_STAT);
	if (ret >= 0) {
		chip->chg_online = (ret & MAX8971_DCUVP_MASK) ? 0 : 1;

		if (chip->chg_online) {
			// Set IRQ MASK register
			max8971_write_reg(chip->client, MAX8971_REG_CHGINT_MASK, chip->pdata->int_mask);
			max8971_set_reg(chip, 1);
		}
	}
	else {
		dev_err(&client->dev, "i2c reading err : %d\n", ret);
		goto err;
	}
*/

	chip->chgcc_forced = 0;
	chip->dcilmt_forced = 60;

	ret = device_create_file(&client->dev, &dev_attr_chgcc_ta);
	if (ret < 0) {
		printk("device_create_file(chgcc_ta) error!\n");
		goto err;
	}

	ret = device_create_file(&client->dev, &dev_attr_chgcc_forced);
	if (ret < 0) {
		printk("device_create_file(chgcc_forced) error!\n");
		goto err_chgcc_forced;
	}

	ret = device_create_file(&client->dev, &dev_attr_dcilmt_forced);
	if (ret < 0) {
		printk("device_create_file(dcilmt_forced) error!\n");
		goto err_dcilmt_forced;
	}

	dev_info(&client->dev, "%s finish...\n", __func__);

	return 0;

err_dcilmt_forced:
	device_remove_file(&client->dev, &dev_attr_chgcc_forced);

err_chgcc_forced:
	device_remove_file(&client->dev, &dev_attr_chgcc_ta);

err:
	free_irq(client->irq, chip);

err_irq_request:
err_gpio_register_2:
	gpio_free(client->irq);

err_gpio_register_1:
	power_supply_unregister(&chip->charger);

err_power_supply_register:
	i2c_set_clientdata(client, NULL);
	kfree(chip);

	return ret;
}