lkml.org 
[lkml]   [2004]   [Aug]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: platform bus, usage?
On 08/22/04 15:45:58, Pierre Ossman wrote:
> I'm in the process of writing a driver for a SD/MMC card reader.
> Since this is the first driver I'm writing I'm having some
> difficulties fitting it into the linux driver model. I've read all
> the documentation I can find to no avail.
>
> The device is attached to the LPC bus and cannot be found using PNP.
> From what I can gather this driver should therefore be organised
> under the platform bus. I can't figure out how to do this though.
> I've created the device structure, with platform_bus_type at .bus.
> I've called device_register with the structure. Now how to I create a
> device object and attach this to the bus? With PCI I guess this
> handles itself using the PCI id:s.
>
> At the moment I just let the driver play by itself. But that doesn't
> seem to be using the driver model properly.
>
> Any pointers would be helpful. Documentation, functions, example
> drivers, anything.

First example that comes to mind is the pxafb framebuffer device. The
framebuffer device_driver is implemented in drivers/video/pxafb.c. The
actual devices are implemented in various files in arch/arm/mach-pxa,
for example, take a look at arch/arm/mach-pxa/generic.c

It is a little confusing, becuase the driver just uses a normal
device_driver structure, but for the actual device, you need to create
and register a platform_device structure.

So the driver has something like this
static struct device_driver pxafb_driver = {
.name = "pxa2xx-fb",
.bus = &platform_bus_type,
.probe = pxafb_probe,
#ifdef CONFIG_PM
.suspend = pxafb_suspend,
.resume = pxafb_resume,
#endif
};

registered with a normal driver_register.

the actual device looks like
static struct platform_device pxafb_device = {
.name = "pxa2xx-fb",
.id = -1,
.dev = {
.platform_data = &pxa_fb_info,
.dma_mask = &fb_dma_mask,
.coherent_dma_mask = 0xffffffff,
},
.num_resources = ARRAY_SIZE(pxafb_resources),
.resource = pxafb_resources,
};
and it is registered with platform_add_devices.

Notice the two names are the same. Devices and drivers on the platform
bus are matched by name. (see platform_match function in drivers/base/
platform.c)

Hope that helps,
John

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 14:05    [W:0.536 / U:0.024 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site