mfd: Add mfd_clone_cell(), convert cs5535-mfd/olpc-xo1 to it
Replace mfd_shared_platform_driver_register with mfd_clone_cell. The former was called by an mfd client, and registered both a platform driver and device. The latter is called by an mfd driver, and registers only a platform device. The downside of this is that mfd drivers need to be modified whenever new clients are added that share a cell; the upside is that it fits Linux's driver model better. It's also simpler. This also converts cs5535-mfd/olpc-xo1 from the old API. cs5535-mfd now creates the olpc-xo1-{acpi,pms} devices, while olpc-xo1 binds to them via platform drivers. Signed-off-by: Andres Salomon <dilinger@queued.net> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Этот коммит содержится в:

коммит произвёл
Samuel Ortiz

родитель
16c29dafcc
Коммит
fa1df69168
@@ -27,6 +27,7 @@
|
||||
#include <linux/mfd/core.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/pci.h>
|
||||
#include <asm/olpc.h>
|
||||
|
||||
#define DRV_NAME "cs5535-mfd"
|
||||
|
||||
@@ -111,6 +112,22 @@ static __devinitdata struct mfd_cell cs5535_mfd_cells[] = {
|
||||
},
|
||||
};
|
||||
|
||||
#ifdef CONFIG_OLPC
|
||||
static void __devinit cs5535_clone_olpc_cells(void)
|
||||
{
|
||||
const char *acpi_clones[] = { "olpc-xo1-acpi" };
|
||||
const char *pms_clones[] = { "olpc-xo1-pms" };
|
||||
|
||||
if (!machine_is_olpc())
|
||||
return;
|
||||
|
||||
mfd_clone_cell("cs5535-acpi", acpi_clones, ARRAY_SIZE(acpi_clones));
|
||||
mfd_clone_cell("cs5535-pms", pms_clones, ARRAY_SIZE(pms_clones));
|
||||
}
|
||||
#else
|
||||
static void cs5535_clone_olpc_cells(void) { }
|
||||
#endif
|
||||
|
||||
static int __devinit cs5535_mfd_probe(struct pci_dev *pdev,
|
||||
const struct pci_device_id *id)
|
||||
{
|
||||
@@ -139,6 +156,7 @@ static int __devinit cs5535_mfd_probe(struct pci_dev *pdev,
|
||||
dev_err(&pdev->dev, "MFD add devices failed: %d\n", err);
|
||||
goto err_disable;
|
||||
}
|
||||
cs5535_clone_olpc_cells();
|
||||
|
||||
dev_info(&pdev->dev, "%zu devices registered.\n",
|
||||
ARRAY_SIZE(cs5535_mfd_cells));
|
||||
|
Ссылка в новой задаче
Block a user