diff --git a/arch/arm64/boot/dts/rockchip/rk3576-evb2.dtsi b/arch/arm64/boot/dts/rockchip/rk3576-evb2.dtsi index d47734e3584b..e9677c75855d 100644 --- a/arch/arm64/boot/dts/rockchip/rk3576-evb2.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3576-evb2.dtsi @@ -16,7 +16,7 @@ status = "okay"; compatible = "rockchip,multicodecs-card"; rockchip,card-name = "rockchip-es8388"; - hp-det-gpio = <&gpio0 RK_PD3 GPIO_ACTIVE_LOW>; + hp-det-gpio = <&gpio1 RK_PD5 GPIO_ACTIVE_LOW>; io-channels = <&saradc 3>; io-channel-names = "adc-detect"; keyup-threshold-microvolt = <1800000>; @@ -415,6 +415,8 @@ &sai1 { status = "okay"; + rockchip,sai-rx-route = <1 0 2 3>; + rockchip,sai-tx-route = <1 0 2 3>; pinctrl-names = "default"; pinctrl-0 = <&sai1m0_lrck &sai1m0_sclk @@ -505,7 +507,7 @@ headphone { hp_det: hp-det { - rockchip,pins = <1 RK_PD5 RK_FUNC_GPIO &pcfg_pull_none>; + rockchip,pins = <1 RK_PD5 RK_FUNC_GPIO &pcfg_pull_up>; }; }; diff --git a/drivers/media/i2c/ov16880.c b/drivers/media/i2c/ov16880.c index b376125f854d..9b26ebc1c153 100644 --- a/drivers/media/i2c/ov16880.c +++ b/drivers/media/i2c/ov16880.c @@ -57,8 +57,8 @@ #define OV16880_AGAIN_REG_H 0x350A #define OV16880_AGAIN_REG_L 0x350B -#define OV16880_SF_AGAIN_REG_H 0x350C -#define OV16880_SF_AGAIN_REG_L 0x350D +#define OV16880_SF_AGAIN_REG_H 0x350E +#define OV16880_SF_AGAIN_REG_L 0x350F #define OV16880_GAIN_H_MASK 0x1f #define OV16880_GAIN_H_SHIFT 8 @@ -2428,6 +2428,34 @@ static const struct v4l2_subdev_ops ov16880_subdev_ops = { .pad = &ov16880_pad_ops, }; +static int ov16880_set_gain_reg(struct ov16880 *ov16880, u32 a_gain) +{ + int ret = 0; + + ret = ov16880_write_reg(ov16880->client, + OV16880_GROUP_UPDATE_ADDRESS, + OV16880_REG_VALUE_08BIT, + OV16880_GROUP_UPDATE_START_DATA); + + ret |= ov16880_write_reg(ov16880->client, + OV16880_SF_AGAIN_REG_H, + OV16880_REG_VALUE_16BIT, + a_gain & 0x7ff); + ret |= ov16880_write_reg(ov16880->client, + OV16880_AGAIN_REG_H, + OV16880_REG_VALUE_16BIT, + a_gain & 0x7ff); + ret |= ov16880_write_reg(ov16880->client, + OV16880_GROUP_UPDATE_ADDRESS, + OV16880_REG_VALUE_08BIT, + OV16880_GROUP_UPDATE_END_DATA); + ret |= ov16880_write_reg(ov16880->client, + OV16880_GROUP_UPDATE_ADDRESS, + OV16880_REG_VALUE_08BIT, + OV16880_GROUP_UPDATE_LAUNCH); + return ret; +}; + static int ov16880_set_ctrl(struct v4l2_ctrl *ctrl) { struct ov16880 *ov16880 = container_of(ctrl->handler, @@ -2463,10 +2491,7 @@ static int ov16880_set_ctrl(struct v4l2_ctrl *ctrl) ctrl->val); break; case V4L2_CID_ANALOGUE_GAIN: - ret = ov16880_write_reg(ov16880->client, - OV16880_AGAIN_REG_H, - OV16880_REG_VALUE_16BIT, - ctrl->val & 0x7ff); + ret = ov16880_set_gain_reg(ov16880, ctrl->val); dev_dbg(&client->dev, "set analog gain value 0x%x\n", ctrl->val); break; case V4L2_CID_VBLANK: