static void max77828_haptic_i2c(struct max77828_haptic_data *hap_data, bool en)
{
	int ret;
	u8 lscnfg_val = 0x00;

	pr_info("[VIB] %s %d\n", __func__, en);

	if (en) {
		lscnfg_val = MAX77828_REG_MAINCTRL1_BIASEN;
	}

	ret = max77828_update_reg(hap_data->i2c, MAX77828_PMIC_REG_MAINCTRL1,
			lscnfg_val, MAX77828_REG_MAINCTRL1_BIASEN);
	if (ret)
		pr_err("[VIB] i2c REG_BIASEN update error %d\n", ret);

	ret = max77828_update_reg(hap_data->i2c, MAX77828_PMIC_REG_MCONFIG,
			0xff, MOTOR_EN);
	if (ret)
		pr_err("[VIB] i2c MOTOR_EN update error %d\n", ret);

	ret = max77828_update_reg(hap_data->i2c, MAX77828_PMIC_REG_MCONFIG,
			0xff, MOTOR_LRA);
	if (ret)
		pr_err("[VIB] i2c MOTOR_LPA update error %d\n", ret);
}
Ejemplo n.º 2
0
static void max77828_rgb_set(struct max77828_led_data *led_data)
{
	int ret;
	int id = led_data->data->id;
	u8 reg;
	u8 bit = 0;

	switch(id)
	{
		case MAX77828_RGB_R:
			reg = MAX77828_LED_REG_LED1BRT;
			bit = 1<<1;
			break;
		case MAX77828_RGB_G:
			reg = MAX77828_LED_REG_LED2BRT;
			bit = 1<<2;
			break;
		case MAX77828_RGB_B:
			reg = MAX77828_LED_REG_LED3BRT;
			bit = 1<<3;
			break;
		default :
			printk("(%s) : Not valid LED ID\n",__func__);
			break;
	}

	if((enum led_brightness)led_data->test_brightness  == LED_OFF)
	{
		printk("(%s) LED_OFF\n",__func__);
		/* LED OFF */
		ret = max77828_update_reg(led_data->i2c, MAX77828_LED_REG_LEDEN,	0, bit);
		if(IS_ERR_VALUE(ret))
			pr_err("(%s) :  LED Bit 0x%02x update failed\n",__func__, bit );
	}
	else
	{
		/* Set Current*/
		ret = max77828_write_reg(led_data->i2c, reg, (unsigned int)led_data->test_brightness);
		if(IS_ERR_VALUE(ret))
			pr_err("(%s) :  write failed\n",__func__);

		/* LEDBLNK ON */
		ret = max77828_write_reg(led_data->i2c, MAX77828_LED_REG_LEDBLNK, 0x50);
		if(IS_ERR_VALUE(ret))
			pr_err("(%s) :  LED Bit %x update failed\n",__func__, bit );

		/* LEDRMP ON */
		ret = max77828_write_reg(led_data->i2c, MAX77828_LED_REG_LEDRMP, 0x00);
		if(IS_ERR_VALUE(ret))
			pr_err("(%s) :  LED Bit %x update failed\n",__func__, bit );

		ret = max77828_read_reg(led_data->i2c, MAX77828_LED_REG_LEDEN, &reg);
		bit |= reg;
		/* LED ON */
		ret = max77828_write_reg(led_data->i2c, MAX77828_LED_REG_LEDEN, bit);
		if(IS_ERR_VALUE(ret))
			pr_err("(%s) :  LED Bit %x update failed\n",__func__, bit );
	}
	return;
}
static void max77828_rgb_set(struct led_classdev *led_cdev,
				unsigned int brightness)
{
	const struct device *parent = led_cdev->dev->parent;
	struct max77828_rgb *max77828_rgb = dev_get_drvdata(parent);
	struct device *dev;
	int n;
	int ret;

	ret = max77828_rgb_number(led_cdev, &max77828_rgb);
	if (IS_ERR_VALUE(ret)) {
		dev_err(led_cdev->dev,
			"max77828_rgb_number() returns %d.\n", ret);
		return;
	}

	dev = led_cdev->dev;
	n = ret;

	if (brightness == LED_OFF) {
		/* Flash OFF */
		ret = max77828_update_reg(max77828_rgb->i2c,
					MAX77828_RGBLED_REG_LEDEN, 0 , 1 << n);
		if (IS_ERR_VALUE(ret)) {
			dev_err(dev, "can't write LEDEN : %d\n", ret);
			return;
		}
	} else {
		/* Set current */
		ret = max77828_write_reg(max77828_rgb->i2c,
				MAX77828_RGBLED_REG_LED0BRT + n, brightness);
		if (IS_ERR_VALUE(ret)) {
			dev_err(dev, "can't write LEDxBRT : %d\n", ret);
			return;
		}
		/* Flash ON */
		ret = max77828_update_reg(max77828_rgb->i2c,
				MAX77828_RGBLED_REG_LEDEN, 0xFF, 1 << n);
		if (IS_ERR_VALUE(ret)) {
			dev_err(dev, "can't write FLASH_EN : %d\n", ret);
			return;
		}
	}
}
Ejemplo n.º 4
0
static void max77828_haptic_shutdown(struct device *dev)
{
	struct max77828_haptic_data *data = dev_get_drvdata(dev);                    
	int ret;                                                                     

	pr_info("%s: Disable HAPTIC\n", __func__);                                   
	ret = max77828_update_reg(data->i2c, MAX77828_PMIC_REG_MCONFIG, 0x0, MOTOR_EN);
	if (ret < 0) {                                                               
		pr_err("%s: fail to update reg\n", __func__);                        
		return;                                                              
	}                                                                            
}
Ejemplo n.º 5
0
static void max77828_flash_set(struct max77828_led_data *led_data)
{
	int ret;
	int brightness = led_data->test_brightness;

	if(brightness == LED_OFF)
	{
		DEBUG_MAX77828("(%s) LED_OFF\n",__func__);
		/* mode select */
//		value = max77828_led_get_en_value(led_data,0);
		ret = max77828_write_reg(led_data->i2c, MAX77828_LED_REG_MODE_SEL, 0x0);
		if(IS_ERR_VALUE(ret))
			pr_err("(%s) :  MAX77828_LED_REG_MODE_SEL update failed\n",__func__);

		/* Flash OFF */
		ret = max77828_update_reg(led_data->i2c, MAX77828_LED_REG_I_FLASH1,
				0, MAX77828_FLASH_FLED1_EN);
		if(IS_ERR_VALUE(ret))
			pr_err("(%s) :  MAX77828_LED_REG_I_FLASH1 update failed\n",__func__ );
	}
	else
	{
		if(brightness > 0x3F)
			brightness = 0x3F;
		DEBUG_MAX77828("(%s) LED_ON\n",__func__);
		ret = max77828_write_reg(led_data->i2c, MAX77828_LED_REG_DCDC_CNTL1,
				MAX77828_DCDC_MODE_PAM);
		if(IS_ERR_VALUE(ret))
			pr_err("(%s) :  MAX77828_LED_REG_DCDC_CNTL1 write failed\n",__func__);
		/* mode select */
		ret = max77828_write_reg(led_data->i2c, MAX77828_LED_REG_MODE_SEL,0x47);
		if(IS_ERR_VALUE(ret))
			pr_err("(%s) :  MAX77828_LED_REG_MODE_SEL update failed\n",__func__);

		/* Flash ON, Set Current */
		ret = max77828_write_reg(led_data->i2c, MAX77828_LED_REG_I_FLASH1,
				MAX77828_FLASH_FLED1_EN |
				((unsigned int)brightness << max77828_set_bit(MAX77828_FLASH_IOUT)));
		if(IS_ERR_VALUE(ret))
			pr_err("(%s) :  MAX77828_LED_REG_I_FLASH1 write failed\n",__func__);
	}
	return;
}