Example #1
0
static int lm3559_torch(unsigned char brightness)                                                                    
{                                                                                                                    
	unsigned char value;                                                                                          
                                                                                                                     
	if (brightness > 0x1F)                                                                                        
		brightness	=	0x1F;                                                                         
                                                                                                                     
	lm3559_write(TORCH_BRIGHTNESS_REG_INDEX, brightness);//set torch brightness                                   
                                                                                                                     
	value = lm3559_read(ENABLE_REG_INDEX);                                                                        
	clrbits(value, 0x01);                                                                                         
	setbits(value, 0x02);                                                                                         
	lm3559_write(ENABLE_REG_INDEX,value);                                                                         
                                                                                                                     
	return	0;                                                                                                    
}                                                                                                                    
Example #2
0
static int lm3559_set_duration(struct lm3559 *flash)
{
	u8 val;

	val = (flash->timeout << LM3559_FLASH_TIMEOUT_SHIFT) |
	      (flash->pdata->current_limit << LM3559_CURRENT_LIMIT_SHIFT);

	return lm3559_write(flash, LM3559_FLASH_DURATION_REG, val);
}
Example #3
0
static int lm3559_set_flash(struct lm3559 *flash)
{
	u8 val;

	val = (flash->flash_current << LM3559_FLASH_LED1_CURRENT_SHIFT) |
		(flash->flash_current << LM3559_FLASH_LED2_CURRENT_SHIFT);

	return lm3559_write(flash, LM3559_FLASH_BRIGHTNESS_REG, val);
}
Example #4
0
static int lm3559_set_indicator(struct lm3559 *flash)
{
	int ret;
	u8 val;

	val = (flash->indicator.indicator_current
			<< LM3559_INDICATOR_CURRENT_SHIFT) |
		(flash->indicator.led1_enable << LM3559_INDICATOR_LED1_SHIFT) |
		(flash->indicator.led2_enable << LM3559_INDICATOR_LED2_SHIFT) |
		(flash->indicator.back_on << LM3559_INDICATOR_BACK_ON) |
		(flash->indicator.blinking_period
			<< LM3559_INDICATOR_BLINKING_PERIOD_SHIFT);
	ret = lm3559_write(flash, LM3559_INDICATOR_PRIVACY_REG, val);
	if (ret)
		return ret;
	val = flash->indicator.pwm_period << LM3559_INDICATOR_PWM_PERIOD_SHIFT;
	ret = lm3559_write(flash, LM3559_INDICATOR_PWM_PERIOD_REG, val);

	return ret;
}
Example #5
0
static int lm3559_set_config(struct lm3559 *flash)
{
	int ret;
	u8 val;

	val = LM3559_CONFIG_REG_1_INIT_SETTING & ~LM3559_TX2_POLARITY_MASK;
	val |= flash->pdata->tx2_polarity << LM3559_TX2_POLARITY_SHIFT;
	ret = lm3559_write(flash, LM3559_CONFIG_REG_1, val);
	if (ret)
		return ret;

	val = LM3559_CONFIG_REG_2_INIT_SETTING & ~LM3559_ENVM_TX2_MASK;
	val |= flash->pdata->envm_tx2 << LM3559_ENVM_TX2_SHIFT;
	ret = lm3559_write(flash, LM3559_CONFIG_REG_2, val);
	if (ret)
		return ret;

	val = LM3559_GPIO_REG_INIT_SETTING & ~LM3559_GPIO_DISABLE_TX2_MASK;
	val |= flash->pdata->disable_tx2 << LM3559_GPIO_DISABLE_TX2_SHIFT;
	return lm3559_write(flash, LM3559_GPIO_REG, val);
}
Example #6
0
static int lm3559_flash(unsigned char timeout)                                                                       
{                                                                                                                    
	unsigned char value;                                                                                          
	if (timeout > 0x1f)                                                                                           
		return	-1;                                                                                           
	                                                                                                              
	// Set flash brightness                                                                                       
	lm3559_write(FLASH_BRIGHTNESS_REG_INDEX, (flash_brightness << 4) | flash_brightness);                         
	                                                                                                              
	value	=	lm3559_read(FLASH_DURATION_REG_INDEX);                                                        
                                                                                                                     
	clrbits(value, 0x1F);                                                                                         
	setbits(value, timeout);                                                                                      
	lm3559_write(FLASH_DURATION_REG_INDEX, value);                                                                
	                                                                                                              
                                                                                                                     
	value	=	lm3559_read(ENABLE_REG_INDEX);                                                                
	setbits(value, 0x03);                                                                                         
	lm3559_write(ENABLE_REG_INDEX, value);                                                                        
	                                                                                                              
	return 0;                                                                                                     
}                                                                                                                    
Example #7
0
static int lm3559_hw_strobe(struct i2c_client *client, bool strobe)
{
	int ret, timer_pending;
	struct v4l2_subdev *sd = i2c_get_clientdata(client);
	struct lm3559 *flash = to_lm3559(sd);
	struct lm3559_platform_data *pdata = flash->pdata;

	/*
	 * An abnormal high flash current is observed on lm3554 when
	 * strobe off the flash. Workaround here is firstly set flash
	 * current to lower level, wait a short moment, and then strobe
	 * off the flash.
	 * FIXME: The same issue exists with lm3559?
	 */

	timer_pending = del_timer_sync(&flash->flash_off_delay);

	/* Flash off */
	if (!strobe) {
		/* set current to 70mA and wait a while */
		ret = lm3559_write(flash, LM3559_FLASH_BRIGHTNESS_REG, 0);
		if (ret < 0)
			goto err;
		mod_timer(&flash->flash_off_delay,
			  jiffies + msecs_to_jiffies(LM3559_TIMER_DELAY));
		return 0;
	}

	/* Flash on */

	/*
	 * If timer is killed before run, flash is not strobe off,
	 * so must strobe off here
	 */
	if (timer_pending)
		gpio_set_value(pdata->gpio_strobe, 0);

	/* Restore flash current settings */
	ret = lm3559_set_flash(flash);
	if (ret < 0)
		goto err;

	/* Strobe on Flash */
	gpio_set_value(pdata->gpio_strobe, 1);

	return 0;
err:
	dev_err(&client->dev, "failed to %s flash strobe (%d)\n",
		strobe ? "on" : "off", ret);
	return ret;
}
Example #8
0
static int lm3559_set_mode(struct lm3559 *flash, unsigned int mode)
{
	u8 val;
	int ret;

	val = lm3559_read(flash, LM3559_ENABLE_REG);
	val &= ~LM3559_MODE_MASK;
	val |= (mode & LM3559_MODE_MASK) << LM3559_MODE_SHIFT;

	ret = lm3559_write(flash, LM3559_ENABLE_REG, val);
	if (ret == 0)
		flash->mode = mode;
	return ret;
}