aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/radio/radio-si470x.c
diff options
context:
space:
mode:
authorTobias Lorenz <tobias.lorenz@gmx.net>2008-09-24 18:25:39 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2008-10-17 16:21:29 -0400
commiteb6e3b860e36a3259d3694636ddce2660aabbd2c (patch)
tree752724a0a62aee995a21d296b753624b7232d134 /drivers/media/radio/radio-si470x.c
parenta17c0019f24e46c608945d988375cc14a8bbde28 (diff)
V4L/DVB (9215): si470x: improvement of unsupported base controls
This patch changes the handling of unsupported base controls. In the former version, specific unsupported base controls were listed in the queryctrl table and were flagged as disabled controls. This was done for all base controls used by the applications. The patch now removes the specific base controls and instead lets queryctrl automatically return unsupported base controls flagged as disabled. Signed-off-by: Tobias Lorenz <tobias.lorenz@gmx.net> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/radio/radio-si470x.c')
-rw-r--r--drivers/media/radio/radio-si470x.c33
1 files changed, 12 insertions, 21 deletions
diff --git a/drivers/media/radio/radio-si470x.c b/drivers/media/radio/radio-si470x.c
index 2f680268c545..31da21a38f24 100644
--- a/drivers/media/radio/radio-si470x.c
+++ b/drivers/media/radio/radio-si470x.c
@@ -1176,7 +1176,6 @@ static const struct file_operations si470x_fops = {
1176 * si470x_v4l2_queryctrl - query control 1176 * si470x_v4l2_queryctrl - query control
1177 */ 1177 */
1178static struct v4l2_queryctrl si470x_v4l2_queryctrl[] = { 1178static struct v4l2_queryctrl si470x_v4l2_queryctrl[] = {
1179/* HINT: the disabled controls are only here to satify kradio and such apps */
1180 { 1179 {
1181 .id = V4L2_CID_AUDIO_VOLUME, 1180 .id = V4L2_CID_AUDIO_VOLUME,
1182 .type = V4L2_CTRL_TYPE_INTEGER, 1181 .type = V4L2_CTRL_TYPE_INTEGER,
@@ -1187,18 +1186,6 @@ static struct v4l2_queryctrl si470x_v4l2_queryctrl[] = {
1187 .default_value = 15, 1186 .default_value = 15,
1188 }, 1187 },
1189 { 1188 {
1190 .id = V4L2_CID_AUDIO_BALANCE,
1191 .flags = V4L2_CTRL_FLAG_DISABLED,
1192 },
1193 {
1194 .id = V4L2_CID_AUDIO_BASS,
1195 .flags = V4L2_CTRL_FLAG_DISABLED,
1196 },
1197 {
1198 .id = V4L2_CID_AUDIO_TREBLE,
1199 .flags = V4L2_CTRL_FLAG_DISABLED,
1200 },
1201 {
1202 .id = V4L2_CID_AUDIO_MUTE, 1189 .id = V4L2_CID_AUDIO_MUTE,
1203 .type = V4L2_CTRL_TYPE_BOOLEAN, 1190 .type = V4L2_CTRL_TYPE_BOOLEAN,
1204 .name = "Mute", 1191 .name = "Mute",
@@ -1207,10 +1194,6 @@ static struct v4l2_queryctrl si470x_v4l2_queryctrl[] = {
1207 .step = 1, 1194 .step = 1,
1208 .default_value = 1, 1195 .default_value = 1,
1209 }, 1196 },
1210 {
1211 .id = V4L2_CID_AUDIO_LOUDNESS,
1212 .flags = V4L2_CTRL_FLAG_DISABLED,
1213 },
1214}; 1197};
1215 1198
1216 1199
@@ -1267,21 +1250,29 @@ static int si470x_vidioc_s_input(struct file *file, void *priv, unsigned int i)
1267static int si470x_vidioc_queryctrl(struct file *file, void *priv, 1250static int si470x_vidioc_queryctrl(struct file *file, void *priv,
1268 struct v4l2_queryctrl *qc) 1251 struct v4l2_queryctrl *qc)
1269{ 1252{
1270 unsigned char i; 1253 unsigned char i = 0;
1271 int retval = -EINVAL; 1254 int retval = -EINVAL;
1272 1255
1273 /* safety checks */ 1256 /* abort if qc->id is below V4L2_CID_BASE */
1274 if (!qc->id) 1257 if (qc->id < V4L2_CID_BASE)
1275 goto done; 1258 goto done;
1276 1259
1260 /* search video control */
1277 for (i = 0; i < ARRAY_SIZE(si470x_v4l2_queryctrl); i++) { 1261 for (i = 0; i < ARRAY_SIZE(si470x_v4l2_queryctrl); i++) {
1278 if (qc->id == si470x_v4l2_queryctrl[i].id) { 1262 if (qc->id == si470x_v4l2_queryctrl[i].id) {
1279 memcpy(qc, &(si470x_v4l2_queryctrl[i]), sizeof(*qc)); 1263 memcpy(qc, &(si470x_v4l2_queryctrl[i]), sizeof(*qc));
1280 retval = 0; 1264 retval = 0; /* found */
1281 break; 1265 break;
1282 } 1266 }
1283 } 1267 }
1284 1268
1269 /* disable unsupported base controls */
1270 /* to satisfy kradio and such apps */
1271 if ((retval == -EINVAL) && (qc->id < V4L2_CID_LASTP1)) {
1272 qc->flags = V4L2_CTRL_FLAG_DISABLED;
1273 retval = 0;
1274 }
1275
1285done: 1276done:
1286 if (retval < 0) 1277 if (retval < 0)
1287 printk(KERN_WARNING DRIVER_NAME 1278 printk(KERN_WARNING DRIVER_NAME