diff mbox

media: dvb-core: Don't force CAN_INVERSION_AUTO in oneshot mode.

Message ID 1441012425-25050-1-git-send-email-tvboxspy@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Malcolm Priestley Aug. 31, 2015, 9:13 a.m. UTC
When in FE_TUNE_MODE_ONESHOT the frontend must report
the actual capabilities so user can take appropriate
action.

With frontends that can't do auto inversion this is done
by dvb-core automatically so CAN_INVERSION_AUTO is valid.

However, when in FE_TUNE_MODE_ONESHOT this is not true.

So only set FE_CAN_INVERSION_AUTO in modes other than
FE_TUNE_MODE_ONESHOT

Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Cc: <stable@vger.kernel.org>
---
 drivers/media/dvb-core/dvb_frontend.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Johann Klammer Aug. 31, 2015, 5:03 p.m. UTC | #1
Why not just remove the line?
	info->caps |= FE_CAN_INVERSION_AUTO;

The capabilities call interacting with the oneshot setting is rather weird and maybe unexpected.


--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Malcolm Priestley Aug. 31, 2015, 5:45 p.m. UTC | #2
On 31/08/15 18:03, Johann Klammer wrote:
>
> Why not just remove the line?
> 	info->caps |= FE_CAN_INVERSION_AUTO;
>
> The capabilities call interacting with the oneshot setting is rather weird and maybe unexpected.
>
>

No, because in normal mode it can do auto inversion.
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Devin Heitmueller Aug. 31, 2015, 6:07 p.m. UTC | #3
Hi Malcolm,

>> The capabilities call interacting with the oneshot setting is rather weird
>> and maybe unexpected.
>>
>>
>
> No, because in normal mode it can do auto inversion.

This isn't my area of expertise, but I suspect this is going to cause
some pretty confusing behavior.  Generally speaking device
capabilities are queried right after the frontend is opened, and the
frontend capabilities typically don't ever change.  In this case, an
application would have to know to check the capabilities a second time
after calling FE_SET_FRONTEND_TUNE_MODE in order to determine whether
auto inversion *really* is available.

If the goal was for the software-emulated auto inversion to be
transparent to userland, perhaps it makes more sense for the oneshot
mode to toggle the inversion if needed.  The oneshot mode would
continue to disable zigzag and the stats monitoring.  I realize that
this is a bit messy since it won't really be "oneshot", but I don't
know what else can be done without breaking the ABI.

Devin
Malcolm Priestley Aug. 31, 2015, 7:12 p.m. UTC | #4
Hi Devin

On 31/08/15 19:07, Devin Heitmueller wrote:
> Hi Malcolm,
>
>>> The capabilities call interacting with the oneshot setting is rather weird
>>> and maybe unexpected.
>>>
>>>
>>
>> No, because in normal mode it can do auto inversion.
...
>
> If the goal was for the software-emulated auto inversion to be
> transparent to userland, perhaps it makes more sense for the oneshot
> mode to toggle the inversion if needed.  The oneshot mode would
> continue to disable zigzag and the stats monitoring.  I realize that
> this is a bit messy since it won't really be "oneshot", but I don't
> know what else can be done without breaking the ABI.
>
I did think flagging INVERSION_AUTO to INVERSION_OFF on frontends
not supporting inversion in oneshot mode.

But it's still messy, as INVERSION_AUTO is need for emulation to work.

Regards


Malcolm
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/media/dvb-core/dvb_frontend.c b/drivers/media/dvb-core/dvb_frontend.c
index c38ef1a..e2a3833 100644
--- a/drivers/media/dvb-core/dvb_frontend.c
+++ b/drivers/media/dvb-core/dvb_frontend.c
@@ -2313,9 +2313,9 @@  static int dvb_frontend_ioctl_legacy(struct file *file,
 		dev_dbg(fe->dvb->device, "%s: current delivery system on cache: %d, V3 type: %d\n",
 				 __func__, c->delivery_system, fe->ops.info.type);
 
-		/* Force the CAN_INVERSION_AUTO bit on. If the frontend doesn't
-		 * do it, it is done for it. */
-		info->caps |= FE_CAN_INVERSION_AUTO;
+		/* Set CAN_INVERSION_AUTO bit on in other than oneshot mode */
+		if (!(fepriv->tune_mode_flags & FE_TUNE_MODE_ONESHOT))
+			info->caps |= FE_CAN_INVERSION_AUTO;
 		err = 0;
 		break;
 	}