diff options
| -rw-r--r-- | drivers/media/i2c/hi556.c | 26 | 
1 files changed, 14 insertions, 12 deletions
| diff --git a/drivers/media/i2c/hi556.c b/drivers/media/i2c/hi556.c index 110dd00c51ae..076c19fcf99c 100644 --- a/drivers/media/i2c/hi556.c +++ b/drivers/media/i2c/hi556.c @@ -762,21 +762,23 @@ static int hi556_test_pattern(struct hi556 *hi556, u32 pattern)  	int ret;  	u32 val; -	if (pattern) { -		ret = hi556_read_reg(hi556, HI556_REG_ISP, -				     HI556_REG_VALUE_08BIT, &val); -		if (ret) -			return ret; +	ret = hi556_read_reg(hi556, HI556_REG_ISP, +			     HI556_REG_VALUE_08BIT, &val); +	if (ret) +		return ret; -		ret = hi556_write_reg(hi556, HI556_REG_ISP, -				      HI556_REG_VALUE_08BIT, -				      val | HI556_REG_ISP_TPG_EN); -		if (ret) -			return ret; -	} +	val = pattern ? (val | HI556_REG_ISP_TPG_EN) : +		(val & ~HI556_REG_ISP_TPG_EN); + +	ret = hi556_write_reg(hi556, HI556_REG_ISP, +			      HI556_REG_VALUE_08BIT, val); +	if (ret) +		return ret; + +	val = pattern ? BIT(pattern - 1) : 0;  	return hi556_write_reg(hi556, HI556_REG_TEST_PATTERN, -			       HI556_REG_VALUE_08BIT, pattern); +			       HI556_REG_VALUE_08BIT, val);  }  static int hi556_set_ctrl(struct v4l2_ctrl *ctrl) | 
