aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
diff options
context:
space:
mode:
authorAntti Palosaari <crope@iki.fi>2013-06-04 17:26:54 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2013-06-08 20:58:51 -0400
commit526ca8dc6ad844550e037841bd5f7090db9e1d4f (patch)
tree1fc8b428690474fe543407b97e2c6cd9ac2492f3 /drivers/media/usb/dvb-usb-v2/rtl28xxu.c
parentbc6fc53de8935031078c50b8a06324aeaf1b4034 (diff)
[media] rtl28xxu: use masked reg write where possible
Use masked register write inside rtl2832u_power_ctrl(). Signed-off-by: Antti Palosaari <crope@iki.fi> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/usb/dvb-usb-v2/rtl28xxu.c')
-rw-r--r--drivers/media/usb/dvb-usb-v2/rtl28xxu.c72
1 files changed, 16 insertions, 56 deletions
diff --git a/drivers/media/usb/dvb-usb-v2/rtl28xxu.c b/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
index 04da6be4de27..6f5a3d0c818f 100644
--- a/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
+++ b/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
@@ -1041,67 +1041,34 @@ err:
1041static int rtl2832u_power_ctrl(struct dvb_usb_device *d, int onoff) 1041static int rtl2832u_power_ctrl(struct dvb_usb_device *d, int onoff)
1042{ 1042{
1043 int ret; 1043 int ret;
1044 u8 val;
1045 1044
1046 dev_dbg(&d->udev->dev, "%s: onoff=%d\n", __func__, onoff); 1045 dev_dbg(&d->udev->dev, "%s: onoff=%d\n", __func__, onoff);
1047 1046
1048 if (onoff) { 1047 if (onoff) {
1049 /* set output values */ 1048 /* GPIO3=1, GPIO4=0 */
1050 ret = rtl28xx_rd_reg(d, SYS_GPIO_OUT_VAL, &val); 1049 ret = rtl28xx_wr_reg_mask(d, SYS_GPIO_OUT_VAL, 0x08, 0x18);
1051 if (ret)
1052 goto err;
1053
1054 val |= 0x08;
1055 val &= 0xef;
1056
1057 ret = rtl28xx_wr_reg(d, SYS_GPIO_OUT_VAL, val);
1058 if (ret)
1059 goto err;
1060
1061 /* demod_ctl_1 */
1062 ret = rtl28xx_rd_reg(d, SYS_DEMOD_CTL1, &val);
1063 if (ret)
1064 goto err;
1065
1066 val &= 0xef;
1067
1068 ret = rtl28xx_wr_reg(d, SYS_DEMOD_CTL1, val);
1069 if (ret)
1070 goto err;
1071
1072 /* demod control */
1073 /* PLL enable */
1074 ret = rtl28xx_rd_reg(d, SYS_DEMOD_CTL, &val);
1075 if (ret) 1050 if (ret)
1076 goto err; 1051 goto err;
1077 1052
1078 /* bit 7 to 1 */ 1053 /* suspend? */
1079 val |= 0x80; 1054 ret = rtl28xx_wr_reg_mask(d, SYS_DEMOD_CTL1, 0x00, 0x10);
1080
1081 ret = rtl28xx_wr_reg(d, SYS_DEMOD_CTL, val);
1082 if (ret) 1055 if (ret)
1083 goto err; 1056 goto err;
1084 1057
1085 ret = rtl28xx_rd_reg(d, SYS_DEMOD_CTL, &val); 1058 /* enable PLL */
1059 ret = rtl28xx_wr_reg_mask(d, SYS_DEMOD_CTL, 0x80, 0x80);
1086 if (ret) 1060 if (ret)
1087 goto err; 1061 goto err;
1088 1062
1089 val |= 0x20; 1063 /* disable reset */
1090 1064 ret = rtl28xx_wr_reg_mask(d, SYS_DEMOD_CTL, 0x20, 0x20);
1091 ret = rtl28xx_wr_reg(d, SYS_DEMOD_CTL, val);
1092 if (ret) 1065 if (ret)
1093 goto err; 1066 goto err;
1094 1067
1095 mdelay(5); 1068 mdelay(5);
1096 1069
1097 /*enable ADC_Q and ADC_I */ 1070 /* enable ADC */
1098 ret = rtl28xx_rd_reg(d, SYS_DEMOD_CTL, &val); 1071 ret = rtl28xx_wr_reg_mask(d, SYS_DEMOD_CTL, 0x48, 0x48);
1099 if (ret)
1100 goto err;
1101
1102 val |= 0x48;
1103
1104 ret = rtl28xx_wr_reg(d, SYS_DEMOD_CTL, val);
1105 if (ret) 1072 if (ret)
1106 goto err; 1073 goto err;
1107 1074
@@ -1114,25 +1081,18 @@ static int rtl2832u_power_ctrl(struct dvb_usb_device *d, int onoff)
1114 if (ret) 1081 if (ret)
1115 goto err; 1082 goto err;
1116 } else { 1083 } else {
1117 /* set output values */ 1084 /* GPIO4=1 */
1118 ret = rtl28xx_rd_reg(d, SYS_GPIO_OUT_VAL, &val); 1085 ret = rtl28xx_wr_reg_mask(d, SYS_GPIO_OUT_VAL, 0x10, 0x10);
1119 if (ret)
1120 goto err;
1121
1122 val |= 0x10;
1123
1124 ret = rtl28xx_wr_reg(d, SYS_GPIO_OUT_VAL, val);
1125 if (ret) 1086 if (ret)
1126 goto err; 1087 goto err;
1127 1088
1128 /* demod control */ 1089 /* disable ADC */
1129 ret = rtl28xx_rd_reg(d, SYS_DEMOD_CTL, &val); 1090 ret = rtl28xx_wr_reg_mask(d, SYS_DEMOD_CTL, 0x00, 0x48);
1130 if (ret) 1091 if (ret)
1131 goto err; 1092 goto err;
1132 1093
1133 val &= 0x37; 1094 /* disable PLL */
1134 1095 ret = rtl28xx_wr_reg_mask(d, SYS_DEMOD_CTL, 0x00, 0x80);
1135 ret = rtl28xx_wr_reg(d, SYS_DEMOD_CTL, val);
1136 if (ret) 1096 if (ret)
1137 goto err; 1097 goto err;
1138 1098