Composite PCI devices in FreeBSD (mfd in Linux)
Ian Lepore
ian at freebsd.org
Wed Dec 19 20:01:48 UTC 2018
On Wed, 2018-12-19 at 14:35 -0500, Anthony Jenkins wrote:
> On 12/19/18 10:41 AM, Anthony Jenkins wrote:
> >
> > [snip]
> >
> > I'm not feeling too confident about the condition of the FreeBSD
> > ig4
> > driver; the PCI attach code was calling pci_alloc_msi() wrong,
> > passing
> > a pointer to the rid (0) instead of a pointer to a count variable,
> > and
> > not passing bus_alloc_resource_any() an IRQ rid > 0 if it has an
> > MSI.
> > I'd be happy(er) if ig4 created a /dev/iic0 node - I figured
> > iicbus(4)
> > took care of all that...
> >
> > https://github.com/ScoobiFreeBSD/freebsd-intel-lpss
> >
> Found it! I didn't declare ig4_iic to include the ig4_lpss as a
> sub-device. Now it at least /looks/ like I'm getting I2C devices
> found
> on both my DesignWare I2C busses.
>
> diff --git a/sys/dev/ichiic/ig4_iic.c b/sys/dev/ichiic/ig4_iic.c
> index 6bbe417..34c1adb 100644
> --- a/sys/dev/ichiic/ig4_iic.c
> +++ b/sys/dev/ichiic/ig4_iic.c
> @@ -802,3 +802,4 @@ ig4iic_dump(ig4iic_softc_t *sc)
>
> DRIVER_MODULE(iicbus, ig4iic_acpi, iicbus_driver, iicbus_devclass,
> NULL, NULL);
> DRIVER_MODULE(iicbus, ig4iic_pci, iicbus_driver, iicbus_devclass,
> NULL, NULL);
> +DRIVER_MODULE(iicbus, ig4iic_lpss, iicbus_driver, iicbus_devclass,
> NULL, NULL);
That new DRIVER_MODULE() statement should be in your new driver, not in
ig4_iic.c. Those other two statements should also be moved into their
corresponding source code files.
At least, that's the precedent followed by all the i2c controller
drivers except ig4_iic: the DRIVER_MODULE() statement that establishes
the connection between iicbus and the controller lives right alongside
the DRIVER_MODULE() statement that establishes the connection between
the controller and the bus it sits on. See, for example:
sys/dev/glxiic/glxiic.c
sys/dev/iicbus/iicoc.c
-- Ian
More information about the freebsd-current
mailing list