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); }
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, ®); 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; } } }
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; } }
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; }