From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758549AbYIDSmY (ORCPT ); Thu, 4 Sep 2008 14:42:24 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1757591AbYIDSjN (ORCPT ); Thu, 4 Sep 2008 14:39:13 -0400 Received: from mail.work.de ([212.12.32.20]:58955 "EHLO mail.work.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756273AbYIDSjM (ORCPT ); Thu, 4 Sep 2008 14:39:12 -0400 Message-ID: <48C02B4B.4010907@gmail.com> Date: Thu, 04 Sep 2008 22:39:07 +0400 From: Manu Abraham User-Agent: Thunderbird 1.5.0.14ubu (X11/20080306) MIME-Version: 1.0 To: linux-kernel@vger.kernel.org, v4l-dvb-maintainer@linuxtv.org, akpm@linux-foundation.org CC: Marco Schluessler Subject: DVB Update [PATCH 16/31] multiproto tree X-Enigmail-Version: 0.94.0.0 Content-Type: multipart/mixed; boundary="------------090101010902000501030604" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is a multi-part message in MIME format. --------------090101010902000501030604 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit >>From 0093e2bd237fcf9825ab8d0c0deebb5bc8dff5c9 Mon Sep 17 00:00:00 2001 From: Manu Abraham Date: Thu, 4 Sep 2008 13:55:49 +0200 Subject: [PATCH] DVB Fix backward compatibility Backward compatibility was broken in terms that it was all around non-legacy devices being selected for device control and hence drivers with the old callbacks never worked. The patch fixes the approach where both set of drivers are working now. tested with a TT S2 3200 (new) and a FF S2300 (legacy) devices From: Marco Schluessler Signed-off-by: Marco Schluessler Signed-off-by: Manu Abraham dvb_frontend.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) --------------090101010902000501030604 Content-Type: text/x-patch; name="16.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="16.patch" >>From 0093e2bd237fcf9825ab8d0c0deebb5bc8dff5c9 Mon Sep 17 00:00:00 2001 From: Manu Abraham Date: Thu, 4 Sep 2008 13:55:49 +0200 Subject: [PATCH] DVB Fix backward compatibility Backward compatibility was broken in terms that it was all around non-legacy devices being selected for device control and hence drivers with the old callbacks never worked. The patch fixes the approach where both set of drivers are working now. tested with a TT S2 3200 (new) and a FF S2300 (legacy) devices From: Marco Schluessler Signed-off-by: Marco Schluessler Signed-off-by: Manu Abraham diff --git a/drivers/media/dvb/dvb-core/dvb_frontend.c b/drivers/media/dvb/dvb-core/dvb_frontend.c index 93b08fa..784acbd 100644 --- a/drivers/media/dvb/dvb-core/dvb_frontend.c +++ b/drivers/media/dvb/dvb-core/dvb_frontend.c @@ -1730,6 +1730,9 @@ static int dvb_frontend_ioctl(struct inode *inode, struct file *file, enum dvbfe_delsys delsys = fepriv->fe_info.delivery; fe->legacy = 0; + if (!(fe->ops.set_params || fe->ops.search)) + fe->legacy = 1; + memcpy(&fepriv->fe_params, parg, sizeof (struct dvbfe_params)); memset(&fetunesettings, 0, sizeof (struct dvb_frontend_tune_settings)); memcpy(&fetunesettings.fe_params, parg, sizeof (struct dvbfe_params)); @@ -1830,6 +1833,22 @@ static int dvb_frontend_ioctl(struct inode *inode, struct file *file, fe->legacy = 0; if (fe->ops.get_delsys) { err = fe->ops.get_delsys(fe, (enum dvbfe_delsys *) parg); + } else { + switch (fe->ops.info.type) { + case FE_QPSK: + *((enum dvbfe_delsys *) parg) = DVBFE_DELSYS_DVBS; + break; + case FE_QAM: + *((enum dvbfe_delsys *) parg) = DVBFE_DELSYS_DVBC; + break; + case FE_OFDM: + *((enum dvbfe_delsys *) parg) = DVBFE_DELSYS_DVBT; + break; + default: + up (&fepriv->sem); + return -EINVAL; + } + err = 0; } break; case DVBFE_GET_INFO: @@ -1839,6 +1858,9 @@ static int dvb_frontend_ioctl(struct inode *inode, struct file *file, memcpy(&fepriv->fe_info, (struct dvbfe_info *) parg, sizeof (struct dvbfe_info)); err = fe->ops.get_info(fe, &fepriv->fe_info); memcpy((struct dvbfe_info *) parg, &fepriv->fe_info, sizeof (struct dvbfe_info)); + } else { + memcpy(&fepriv->fe_info, (struct dvbfe_info *) parg, sizeof (struct dvbfe_info)); + err = 0; } break; }; --------------090101010902000501030604--