Re: v4l2_subdev GPIO and Pin Control ops (Re: PxDVR3200 H LinuxTV v4l-dvb patch : Pull GPIO-20 low for DVB-T)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2009-06-26 at 12:25 -0400, Steven Toth wrote:
> On 6/26/09 12:12 PM, Andy Walls wrote:
> > On Fri, 2009-06-26 at 10:37 -0400, Steven Toth wrote:
> >> On 6/25/09 7:15 AM, Andy Walls wrote:
> >>> On Thu, 2009-06-25 at 08:39 +0200, Hans Verkuil wrote:
> >>>> On Thursday 25 June 2009 04:40:11 Andy Walls wrote:
> >>>>> On Tue, 2009-06-23 at 14:33 +0200, Hans Verkuil wrote:
> >>>>>>> On Tue, 2009-06-23 at 11:39 +0800, Terry Wu wrote:
> >>>>>>>
> >>>>>> There is already an s_gpio in the core ops. It would be simple to add a
> >>>>>> g_gpio as well if needed.
> >>>>> Hans,
> >>>>>
> >>>>> As you probably know
> >>>>>
> >>>>> 	int (*s_gpio)(v4l2_subdev *sd, u32 val);
> >>>>>
> >>>>> is a little too simple for initial setup of GPIO pins.  With the
> >>>>> collection of chips&   cores supported by cx25840 module, setting the
> >>>>> GPIO configuration also requires:
> >>>>>
> >>>>> 	direction: In or Out
> >>>>> 	multiplexed pins: GPIO or some other function
> >>>>>
> >>>>> I could tack on direction as an argument to s_gpio(), but I think that
> >>>>> is a bit inconvenient..  I'd rather have a
> >>>>>
> >>>>> 	int (*s_gpio_config)(v4l2_subdev *sd, u32 dir, u32 initval);
> >>>>>
> >>>>> but that leaves out the method for multiplexed pin/pad configuration.
> >>>>> Perhaps explicity setting a GPIO direction to OUT could be an implicit
> >>>>> indication that a multiplexed pin should be set to it's GPIO function.
> >>>>> However, that doesn't help for GPIO inputs that might have their pins
> >>>>> multiplexed with other functions.
> >>>>>
> >>>>> Here's an idea on how to specify multiplexed pin configuration
> >>>>> information and it could involve pins that multiplex functions other
> >>>>> than GPIO (the CX25843 is quite flexible in this regard):
> >>>>>
> >>>>> 	int (*s_pin_function)(v4l2_subdev *sd, u32 pin_id, u32 function);
> >>>>>
> >>>>> The type checking ends up pretty weak, but I figured it was better than
> >>>>> a 'void *config' that had a subdev specific collection of pin
> >>>>> configuration information.
> >>>>>
> >>>>> Comments?
> >>>> Hi Andy,
> >>>>
> >>>> Is there any driver that needs to setup the multiplex functions? If not, then
> >>>> I would not add support for this at the moment.
> >>> Well, the group of GPIO pins in question for the CX23885 are all
> >>> multiplexed with other functions.  We could just initialize the CX23885
> >>> to have those pins set as GPIOs, but I have to check the cx23885 driver
> >>> to make sure that's safe.
> >> I'm in the process of rationalizing the GPIO handing inside the cx23885 driver,
> >> largely because of the cx23417. The current encoder driver has a hardcoded GPIO
> >> used on GPIO 15. (legacy from the first HVR1800 implementation, which I'm
> >> cleaning up).
> >>
> >> I would add this to the conversation, the product I'm working on now HVR1850
> >> needs to switch GPIO's on the fly to enable and disable parts (the ATSC demod)
> >> via an encoder GPIO pin, depending on the cards operating mode. This isn't a
> >> one-time operation, it needs to be dynamic.
> >>
> >> In effect we have to tri-state / float certain parts depending whether we're in
> >> analog or digital mode, and depending on which tuner is being used.
> >
> >
> > Steve,
> >
> > The setting of GPIO's is (or will be) dynamic via the .s_gpio()
> > v4l2_subdev operation.
> >
> > Just to clarify some things above:
> >
> > 1. I assume setting of GPIO direction is not required to be done the
> > fly.  Is that correct?
> 
> No, incorrect. We have cases where we need to float the GPIO (HVR1300, HVR1850) 
> we hack around this at the moment for various encoders and demods. Generally we 
> need this functionality across a number of drivers.
> 
> >
> > 2. I assume switching of the internal routing of signals to chip pins is
> > not required to be done on the fly.  Is that correct?
> 
> No, incorrect. Same as above.
> 
> >
> >
> >
> > My plan was to add the necessary support to the cx25840 module for
> > setting up the cx23885 pin control multiplexers (subdev config time),
> > the GPIO 23-19 directions (subdev config time), and the GPIO 23-19
> > output states (dynamically as needed via subdev's .s_gpio call).
> 
> Ahh. I'm already working on this, the code is partially merged for the GPIO 
> overhaul (a few weeks ago). I'm currently on the next stage. You should see some 
> todo comments in the current cx23885 driver.
> 
> Doesn't the cx23885 driver already configure the multiplexer pins at config time 
> for the cx25840? Check the -cards.c for the HVR1800 entry.
> 
> >
> > Is this a bad plan for your needs?
> 
> It sounds like in some respects were working on the same thing, perhaps from 
> different approaches. Although my needs are not to modify the 25840 driver as 
> such, but have the cx23885 bridge be intelligent enough to be able to flip all 
> 32 GPIO's regardless of whether they're in the avcore (embedded 25840), or the 
> encoder or on the bridge itself.
> 
> If I'm late to the party and I've missed something obvious then I apologize in 
> advance.

Nope.  I'll spin down my effort which is at 5 lines of code so far. :)

I was just going to handle part of the cx25840 module changes needed to
add/fix GPIO settings for cx23885 since the cx23885 bridge essentailly
is treating it's A/V core as a v4l2_subdevice (and since I muck with
that module for ivtv occassionally and Hans was probably too busy).

I just didn't want any needed cx25840 changes holding up support for the
PxDVR3200 or any other card.

Regards,
Andy

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

[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux