On Fri, 2012-08-17 at 02:49 +0200, Laurent Pinchart wrote: > +/* > ----------------------------------------------------------------------------- > + * Bus operations > + */ > + > +void panel_dbi_write_command(struct panel_dbi_device *dev, unsigned long cmd) > +{ > + dev->bus->ops->write_command(dev->bus, cmd); > +} > +EXPORT_SYMBOL_GPL(panel_dbi_write_command); > + > +void panel_dbi_write_data(struct panel_dbi_device *dev, unsigned long data) > +{ > + dev->bus->ops->write_data(dev->bus, data); > +} > +EXPORT_SYMBOL_GPL(panel_dbi_write_data); > + > +unsigned long panel_dbi_read_data(struct panel_dbi_device *dev) > +{ > + return dev->bus->ops->read_data(dev->bus); > +} > +EXPORT_SYMBOL_GPL(panel_dbi_read_data);
I'm not that familiar with how to implement bus drivers, can you describe in pseudo code how the SoC's DBI driver would register these? I think write/read data functions are a bit limited. Shouldn't they be something like write_data(const u8 *buf, int size) and read_data(u8 *buf, int len)? Something that's totally missing is configuring the DBI bus. There are a bunch of timing related values that need to be configured. See include/video/omapdss.h struct rfbi_timings. While the struct is OMAP specific, if I recall right most of the values match to the MIPI DBI spec. And this makes me wonder, you use DBI bus for SYS-80 panel. The busses may look similar in operation, but are they really so similar when you take into account the timings (and perhaps something else, it's been years since I read the MIPI DBI spec)? Then there's the start_transfer. This is something I'm not sure what is the best way to handle it, but the same problems that I mentioned in the previous post related to enable apply here also. For example, what if the panel needs to be update in two parts? This is done in Nokia N9.