Re: Looking for device driver advice

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

 



Hi Sakari,

On 2017-04-18 10:46:36 +0300, Sakari Ailus wrote:
> Hi Niklas,
> 
> On Sun, Apr 16, 2017 at 07:42:20PM +0200, Niklas Söderlund wrote:
> > Hi,
> > 
> > On 2017-04-16 13:51:21 +0300, Sakari Ailus wrote:
> > > Hi Hans and Patrick,
> > > 
> > > On Wed, Apr 12, 2017 at 01:37:33PM +0200, Hans Verkuil wrote:
> > > > Hi Patrick,
> > > > 
> > > > On 04/10/2017 10:13 PM, Patrick Doyle wrote:
> > > > > I am looking for advice regarding the construction of a device driver
> > > > > for a MIPI CSI2 imager (a Sony IMX241) that is connected to a
> > > > > MIPI<->Parallel converter (Toshiba TC358748) wired into a parallel
> > > > > interface on a Soc (a Microchip/Atmel SAMAD2x device.)
> > > > > 
> > > > > The Sony imager is controlled and configured via I2C, as is the
> > > > > Toshiba converter.  I could write a single driver that configures both
> > > > > devices and treats them as a single device that just happens to use 2
> > > > > i2c addresses.  I could use the i2c_new_dummy() API to construct the
> > > > > device abstraction for the second physical device at probe time for
> > > > > the first physical device.
> > > > > 
> > > > > Or I could do something smarter (or at least different), specifying
> > > > > the two devices independently via my device tree file, perhaps linking
> > > > > them together via "port" nodes.  Currently, I use the "port" node
> > > > > concept to link an i2c imager to the Image System Controller (isc)
> > > > > node in the SAMA5 device.  Perhaps that generalizes to a chain of
> > > > > nodes linked together... I don't know.
> > > > 
> > > > That would be the right solution. Unfortunately the atmel-isc.c driver
> > > > (at least the version in the mainline kernel) only supports a single
> > > > subdev device. At least, as far as I can see.
> > 
> > I also think that two subdevices implemented in two separate drivers is 
> > the way to go. As it really is two different pieces of hardware,
> > right?
> > 
> > > 
> > > There have been multiple cases recently where the media pipeline can have
> > > sub-devices controlled by more than two drivers. We need to have a common
> > > approach on how we do handle such cases.
> > 
> > I agree that a common approach to the problem of when one subdevices can 
> > be controlled by more then one driver is needed. In this case however I 
> > think something else also needs to be defined. If I understand Hans and 
> > Patrick the issues is not that the hardware can be controlled by more 
> > then one driver. Instead it is that the atmel-isc.c driver only probes 
> > DT for one subdevice, so implementing it as more then one subdevices is 
> > problematic. If I misunderstand the problem please let me know.
> 
> The pipeline is (again, unless I'm mistaken):
> 
> sensor -> csi2-parallel converter -> SoC
> 
> So not very much unlike it's elsewhere.
> 
> > 
> > If I understand the problem correctly it could be solved by modifying 
> > the atmel-isc.c driver to look for more then one subdevice in DT. But a 
> > common approach for drivers to find and bind arbitrary number of 
> > subdevices would be better, finding an approach that also solves the 
> > case where one subdevice can be used by more then one driver would be 
> > better still. If this common case also could cover the case where one DT 
> > node represents a driver which registers more then one subdevice which 
> > then can be used by different other drivers I would be very happy and a 
> > lot of my headaches would go away :-)
> > 
> > > 
> > > For instance, how is the entire DT graph parsed or when and how are the
> > > device nodes created?
> > > 
> > > Parsing the graph should probably be initiated by the master driver but
> > > instead implemented in the framework as it's a non-trivial task and common
> > > to all such drivers. Another equestion is how do we best support this also
> > > on existing drivers.
> > 
> > I agree that the master device probably should initiate the DT graph 
> > parsing and if possible there should be as much support as possible in 
> > the framework. One extra consideration here is that there might be more 
> > then one master device which uses the same subdevices. I have such cases 
> 
> Good point. I.e. you have two source pads that are connected to two
> different master devices?

No, I have one source pad which is connected to more then one master 
devices. The source pad carries CSI-2 streams so different master 
devices will receive different virtual channels, or better still 
different master devices can receive the same virtual channel but apply 
different scaling/conversions on the stream before it reaches the 
/dev/videoX node.

> 
> > today where different instances of the same driver use the same set of 
> > subdevices.
> 
> Is this the intended state of matters? Or do I miss something? :-)

Yes, it is the goal to be able to represent all hardware configurations 
in the media graph.

Currently the master devices is different instances of the same driver, 
rcar-vin. So the solution right now is that the first VIN creates a 
media device, finds all upstream subdevices and adds them to the media 
graph. Later instances of the rcar-vin driver will simply join the media 
device and this way gain access to the shard subdevices.

This works but creates a complex logic to share subdevices. If more then 
one master device could find the same subdevices I believe this logic 
could be simplified and maybe more functionality could be put in the 
V4L2 core.

> 
> > 
> > > 
> > > I actually have a small documentation patch on handling streaming control in
> > > such cases as there are choices now to be made not thought about when the
> > > sub-device ops were originally addeed. I'll cc you to that.
> > > 
> > > We do have a similar case currently in i.MX6, Nokia N9 (OMAP3) and on some
> 
> I meant to say Nokia N900, not N9.

Nice, I have a N900 :-)

> 
> -- 
> Kind regards,
> 
> Sakari Ailus
> e-mail: sakari.ailus@xxxxxx	XMPP: sailus@xxxxxxxxxxxxxx

-- 
Regards,
Niklas Söderlund



[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