public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* platform bus, usage?
@ 2004-08-22 20:45 Pierre Ossman
  2004-08-22 23:02 ` John Lenz
  0 siblings, 1 reply; 2+ messages in thread
From: Pierre Ossman @ 2004-08-22 20:45 UTC (permalink / raw)
  To: linux-kernel

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.

Rgds
Pierre Ossman


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: platform bus, usage?
  2004-08-22 20:45 platform bus, usage? Pierre Ossman
@ 2004-08-22 23:02 ` John Lenz
  0 siblings, 0 replies; 2+ messages in thread
From: John Lenz @ 2004-08-22 23:02 UTC (permalink / raw)
  To: Pierre Ossman; +Cc: linux-kernel

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


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2004-08-22 23:01 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-08-22 20:45 platform bus, usage? Pierre Ossman
2004-08-22 23:02 ` John Lenz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox