Merge branch 'devicetree/merge' of git://git.secretlab.ca/git/linux-2.6
* 'devicetree/merge' of git://git.secretlab.ca/git/linux-2.6: drivercore: revert addition of of_match to struct device of: fix race when matching drivers
This commit is contained in:
commit
fce519588a
|
@ -318,17 +318,20 @@ static const struct platform_suspend_ops mpc83xx_suspend_ops = {
|
||||||
.end = mpc83xx_suspend_end,
|
.end = mpc83xx_suspend_end,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct of_device_id pmc_match[];
|
||||||
static int pmc_probe(struct platform_device *ofdev)
|
static int pmc_probe(struct platform_device *ofdev)
|
||||||
{
|
{
|
||||||
|
const struct of_device_id *match;
|
||||||
struct device_node *np = ofdev->dev.of_node;
|
struct device_node *np = ofdev->dev.of_node;
|
||||||
struct resource res;
|
struct resource res;
|
||||||
struct pmc_type *type;
|
struct pmc_type *type;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (!ofdev->dev.of_match)
|
match = of_match_device(pmc_match, &ofdev->dev);
|
||||||
|
if (!match)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
type = ofdev->dev.of_match->data;
|
type = match->data;
|
||||||
|
|
||||||
if (!of_device_is_available(np))
|
if (!of_device_is_available(np))
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
|
@ -304,8 +304,10 @@ static int __devinit fsl_msi_setup_hwirq(struct fsl_msi *msi,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct of_device_id fsl_of_msi_ids[];
|
||||||
static int __devinit fsl_of_msi_probe(struct platform_device *dev)
|
static int __devinit fsl_of_msi_probe(struct platform_device *dev)
|
||||||
{
|
{
|
||||||
|
const struct of_device_id *match;
|
||||||
struct fsl_msi *msi;
|
struct fsl_msi *msi;
|
||||||
struct resource res;
|
struct resource res;
|
||||||
int err, i, j, irq_index, count;
|
int err, i, j, irq_index, count;
|
||||||
|
@ -316,9 +318,10 @@ static int __devinit fsl_of_msi_probe(struct platform_device *dev)
|
||||||
u32 offset;
|
u32 offset;
|
||||||
static const u32 all_avail[] = { 0, NR_MSI_IRQS };
|
static const u32 all_avail[] = { 0, NR_MSI_IRQS };
|
||||||
|
|
||||||
if (!dev->dev.of_match)
|
match = of_match_device(fsl_of_msi_ids, &dev->dev);
|
||||||
|
if (!match)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
features = dev->dev.of_match->data;
|
features = match->data;
|
||||||
|
|
||||||
printk(KERN_DEBUG "Setting up Freescale MSI support\n");
|
printk(KERN_DEBUG "Setting up Freescale MSI support\n");
|
||||||
|
|
||||||
|
|
|
@ -452,8 +452,10 @@ static void __devinit sabre_pbm_init(struct pci_pbm_info *pbm,
|
||||||
sabre_scan_bus(pbm, &op->dev);
|
sabre_scan_bus(pbm, &op->dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct of_device_id sabre_match[];
|
||||||
static int __devinit sabre_probe(struct platform_device *op)
|
static int __devinit sabre_probe(struct platform_device *op)
|
||||||
{
|
{
|
||||||
|
const struct of_device_id *match;
|
||||||
const struct linux_prom64_registers *pr_regs;
|
const struct linux_prom64_registers *pr_regs;
|
||||||
struct device_node *dp = op->dev.of_node;
|
struct device_node *dp = op->dev.of_node;
|
||||||
struct pci_pbm_info *pbm;
|
struct pci_pbm_info *pbm;
|
||||||
|
@ -463,7 +465,8 @@ static int __devinit sabre_probe(struct platform_device *op)
|
||||||
const u32 *vdma;
|
const u32 *vdma;
|
||||||
u64 clear_irq;
|
u64 clear_irq;
|
||||||
|
|
||||||
hummingbird_p = op->dev.of_match && (op->dev.of_match->data != NULL);
|
match = of_match_device(sabre_match, &op->dev);
|
||||||
|
hummingbird_p = match && (match->data != NULL);
|
||||||
if (!hummingbird_p) {
|
if (!hummingbird_p) {
|
||||||
struct device_node *cpu_dp;
|
struct device_node *cpu_dp;
|
||||||
|
|
||||||
|
|
|
@ -1458,11 +1458,15 @@ out_err:
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct of_device_id schizo_match[];
|
||||||
static int __devinit schizo_probe(struct platform_device *op)
|
static int __devinit schizo_probe(struct platform_device *op)
|
||||||
{
|
{
|
||||||
if (!op->dev.of_match)
|
const struct of_device_id *match;
|
||||||
|
|
||||||
|
match = of_match_device(schizo_match, &op->dev);
|
||||||
|
if (!match)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
return __schizo_init(op, (unsigned long) op->dev.of_match->data);
|
return __schizo_init(op, (unsigned long)match->data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The ordering of this table is very important. Some Tomatillo
|
/* The ordering of this table is very important. Some Tomatillo
|
||||||
|
|
|
@ -2643,16 +2643,19 @@ fore200e_init(struct fore200e* fore200e, struct device *parent)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SBUS
|
#ifdef CONFIG_SBUS
|
||||||
|
static const struct of_device_id fore200e_sba_match[];
|
||||||
static int __devinit fore200e_sba_probe(struct platform_device *op)
|
static int __devinit fore200e_sba_probe(struct platform_device *op)
|
||||||
{
|
{
|
||||||
|
const struct of_device_id *match;
|
||||||
const struct fore200e_bus *bus;
|
const struct fore200e_bus *bus;
|
||||||
struct fore200e *fore200e;
|
struct fore200e *fore200e;
|
||||||
static int index = 0;
|
static int index = 0;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (!op->dev.of_match)
|
match = of_match_device(fore200e_sba_match, &op->dev);
|
||||||
|
if (!match)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
bus = op->dev.of_match->data;
|
bus = match->data;
|
||||||
|
|
||||||
fore200e = kzalloc(sizeof(struct fore200e), GFP_KERNEL);
|
fore200e = kzalloc(sizeof(struct fore200e), GFP_KERNEL);
|
||||||
if (!fore200e)
|
if (!fore200e)
|
||||||
|
|
|
@ -619,15 +619,18 @@ static void __devinit n2rng_driver_version(void)
|
||||||
pr_info("%s", version);
|
pr_info("%s", version);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct of_device_id n2rng_match[];
|
||||||
static int __devinit n2rng_probe(struct platform_device *op)
|
static int __devinit n2rng_probe(struct platform_device *op)
|
||||||
{
|
{
|
||||||
|
const struct of_device_id *match;
|
||||||
int victoria_falls;
|
int victoria_falls;
|
||||||
int err = -ENOMEM;
|
int err = -ENOMEM;
|
||||||
struct n2rng *np;
|
struct n2rng *np;
|
||||||
|
|
||||||
if (!op->dev.of_match)
|
match = of_match_device(n2rng_match, &op->dev);
|
||||||
|
if (!match)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
victoria_falls = (op->dev.of_match->data != NULL);
|
victoria_falls = (match->data != NULL);
|
||||||
|
|
||||||
n2rng_driver_version();
|
n2rng_driver_version();
|
||||||
np = kzalloc(sizeof(*np), GFP_KERNEL);
|
np = kzalloc(sizeof(*np), GFP_KERNEL);
|
||||||
|
|
|
@ -2554,9 +2554,11 @@ static struct pci_driver ipmi_pci_driver = {
|
||||||
};
|
};
|
||||||
#endif /* CONFIG_PCI */
|
#endif /* CONFIG_PCI */
|
||||||
|
|
||||||
|
static struct of_device_id ipmi_match[];
|
||||||
static int __devinit ipmi_probe(struct platform_device *dev)
|
static int __devinit ipmi_probe(struct platform_device *dev)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_OF
|
#ifdef CONFIG_OF
|
||||||
|
const struct of_device_id *match;
|
||||||
struct smi_info *info;
|
struct smi_info *info;
|
||||||
struct resource resource;
|
struct resource resource;
|
||||||
const __be32 *regsize, *regspacing, *regshift;
|
const __be32 *regsize, *regspacing, *regshift;
|
||||||
|
@ -2566,7 +2568,8 @@ static int __devinit ipmi_probe(struct platform_device *dev)
|
||||||
|
|
||||||
dev_info(&dev->dev, "probing via device tree\n");
|
dev_info(&dev->dev, "probing via device tree\n");
|
||||||
|
|
||||||
if (!dev->dev.of_match)
|
match = of_match_device(ipmi_match, &dev->dev);
|
||||||
|
if (!match)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
ret = of_address_to_resource(np, 0, &resource);
|
ret = of_address_to_resource(np, 0, &resource);
|
||||||
|
@ -2601,7 +2604,7 @@ static int __devinit ipmi_probe(struct platform_device *dev)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
info->si_type = (enum si_type) dev->dev.of_match->data;
|
info->si_type = (enum si_type) match->data;
|
||||||
info->addr_source = SI_DEVICETREE;
|
info->addr_source = SI_DEVICETREE;
|
||||||
info->irq_setup = std_irq_setup;
|
info->irq_setup = std_irq_setup;
|
||||||
|
|
||||||
|
|
|
@ -715,13 +715,13 @@ static int __devexit hwicap_remove(struct device *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_OF
|
#ifdef CONFIG_OF
|
||||||
static int __devinit hwicap_of_probe(struct platform_device *op)
|
static int __devinit hwicap_of_probe(struct platform_device *op,
|
||||||
|
const struct hwicap_driver_config *config)
|
||||||
{
|
{
|
||||||
struct resource res;
|
struct resource res;
|
||||||
const unsigned int *id;
|
const unsigned int *id;
|
||||||
const char *family;
|
const char *family;
|
||||||
int rc;
|
int rc;
|
||||||
const struct hwicap_driver_config *config = op->dev.of_match->data;
|
|
||||||
const struct config_registers *regs;
|
const struct config_registers *regs;
|
||||||
|
|
||||||
|
|
||||||
|
@ -751,20 +751,24 @@ static int __devinit hwicap_of_probe(struct platform_device *op)
|
||||||
regs);
|
regs);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static inline int hwicap_of_probe(struct platform_device *op)
|
static inline int hwicap_of_probe(struct platform_device *op,
|
||||||
|
const struct hwicap_driver_config *config)
|
||||||
{
|
{
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_OF */
|
#endif /* CONFIG_OF */
|
||||||
|
|
||||||
|
static const struct of_device_id __devinitconst hwicap_of_match[];
|
||||||
static int __devinit hwicap_drv_probe(struct platform_device *pdev)
|
static int __devinit hwicap_drv_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
|
const struct of_device_id *match;
|
||||||
struct resource *res;
|
struct resource *res;
|
||||||
const struct config_registers *regs;
|
const struct config_registers *regs;
|
||||||
const char *family;
|
const char *family;
|
||||||
|
|
||||||
if (pdev->dev.of_match)
|
match = of_match_device(hwicap_of_match, &pdev->dev);
|
||||||
return hwicap_of_probe(pdev);
|
if (match)
|
||||||
|
return hwicap_of_probe(pdev, match->data);
|
||||||
|
|
||||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
if (!res)
|
if (!res)
|
||||||
|
|
|
@ -1019,7 +1019,7 @@ ppc4xx_edac_mc_init(struct mem_ctl_info *mci,
|
||||||
struct ppc4xx_edac_pdata *pdata = NULL;
|
struct ppc4xx_edac_pdata *pdata = NULL;
|
||||||
const struct device_node *np = op->dev.of_node;
|
const struct device_node *np = op->dev.of_node;
|
||||||
|
|
||||||
if (op->dev.of_match == NULL)
|
if (of_match_device(ppc4xx_edac_match, &op->dev) == NULL)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
/* Initial driver pointers and private data */
|
/* Initial driver pointers and private data */
|
||||||
|
|
|
@ -560,15 +560,18 @@ static struct i2c_adapter mpc_ops = {
|
||||||
.timeout = HZ,
|
.timeout = HZ,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const struct of_device_id mpc_i2c_of_match[];
|
||||||
static int __devinit fsl_i2c_probe(struct platform_device *op)
|
static int __devinit fsl_i2c_probe(struct platform_device *op)
|
||||||
{
|
{
|
||||||
|
const struct of_device_id *match;
|
||||||
struct mpc_i2c *i2c;
|
struct mpc_i2c *i2c;
|
||||||
const u32 *prop;
|
const u32 *prop;
|
||||||
u32 clock = MPC_I2C_CLOCK_LEGACY;
|
u32 clock = MPC_I2C_CLOCK_LEGACY;
|
||||||
int result = 0;
|
int result = 0;
|
||||||
int plen;
|
int plen;
|
||||||
|
|
||||||
if (!op->dev.of_match)
|
match = of_match_device(mpc_i2c_of_match, &op->dev);
|
||||||
|
if (!match)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
i2c = kzalloc(sizeof(*i2c), GFP_KERNEL);
|
i2c = kzalloc(sizeof(*i2c), GFP_KERNEL);
|
||||||
|
@ -605,8 +608,8 @@ static int __devinit fsl_i2c_probe(struct platform_device *op)
|
||||||
clock = *prop;
|
clock = *prop;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (op->dev.of_match->data) {
|
if (match->data) {
|
||||||
struct mpc_i2c_data *data = op->dev.of_match->data;
|
struct mpc_i2c_data *data = match->data;
|
||||||
data->setup(op->dev.of_node, i2c, clock, data->prescaler);
|
data->setup(op->dev.of_node, i2c, clock, data->prescaler);
|
||||||
} else {
|
} else {
|
||||||
/* Backwards compatibility */
|
/* Backwards compatibility */
|
||||||
|
|
|
@ -124,8 +124,10 @@ static bool __devinit sdhci_of_wp_inverted(struct device_node *np)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct of_device_id sdhci_of_match[];
|
||||||
static int __devinit sdhci_of_probe(struct platform_device *ofdev)
|
static int __devinit sdhci_of_probe(struct platform_device *ofdev)
|
||||||
{
|
{
|
||||||
|
const struct of_device_id *match;
|
||||||
struct device_node *np = ofdev->dev.of_node;
|
struct device_node *np = ofdev->dev.of_node;
|
||||||
struct sdhci_of_data *sdhci_of_data;
|
struct sdhci_of_data *sdhci_of_data;
|
||||||
struct sdhci_host *host;
|
struct sdhci_host *host;
|
||||||
|
@ -134,9 +136,10 @@ static int __devinit sdhci_of_probe(struct platform_device *ofdev)
|
||||||
int size;
|
int size;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!ofdev->dev.of_match)
|
match = of_match_device(sdhci_of_match, &ofdev->dev);
|
||||||
|
if (!match)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
sdhci_of_data = ofdev->dev.of_match->data;
|
sdhci_of_data = match->data;
|
||||||
|
|
||||||
if (!of_device_is_available(np))
|
if (!of_device_is_available(np))
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
|
@ -214,11 +214,13 @@ static void __devinit of_free_probes(const char **probes)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static struct of_device_id of_flash_match[];
|
||||||
static int __devinit of_flash_probe(struct platform_device *dev)
|
static int __devinit of_flash_probe(struct platform_device *dev)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_MTD_PARTITIONS
|
#ifdef CONFIG_MTD_PARTITIONS
|
||||||
const char **part_probe_types;
|
const char **part_probe_types;
|
||||||
#endif
|
#endif
|
||||||
|
const struct of_device_id *match;
|
||||||
struct device_node *dp = dev->dev.of_node;
|
struct device_node *dp = dev->dev.of_node;
|
||||||
struct resource res;
|
struct resource res;
|
||||||
struct of_flash *info;
|
struct of_flash *info;
|
||||||
|
@ -232,9 +234,10 @@ static int __devinit of_flash_probe(struct platform_device *dev)
|
||||||
struct mtd_info **mtd_list = NULL;
|
struct mtd_info **mtd_list = NULL;
|
||||||
resource_size_t res_size;
|
resource_size_t res_size;
|
||||||
|
|
||||||
if (!dev->dev.of_match)
|
match = of_match_device(of_flash_match, &dev->dev);
|
||||||
|
if (!match)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
probe_type = dev->dev.of_match->data;
|
probe_type = match->data;
|
||||||
|
|
||||||
reg_tuple_size = (of_n_addr_cells(dp) + of_n_size_cells(dp)) * sizeof(u32);
|
reg_tuple_size = (of_n_addr_cells(dp) + of_n_size_cells(dp)) * sizeof(u32);
|
||||||
|
|
||||||
|
|
|
@ -247,8 +247,10 @@ static u32 __devinit mpc512x_can_get_clock(struct platform_device *ofdev,
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_PPC_MPC512x */
|
#endif /* CONFIG_PPC_MPC512x */
|
||||||
|
|
||||||
|
static struct of_device_id mpc5xxx_can_table[];
|
||||||
static int __devinit mpc5xxx_can_probe(struct platform_device *ofdev)
|
static int __devinit mpc5xxx_can_probe(struct platform_device *ofdev)
|
||||||
{
|
{
|
||||||
|
const struct of_device_id *match;
|
||||||
struct mpc5xxx_can_data *data;
|
struct mpc5xxx_can_data *data;
|
||||||
struct device_node *np = ofdev->dev.of_node;
|
struct device_node *np = ofdev->dev.of_node;
|
||||||
struct net_device *dev;
|
struct net_device *dev;
|
||||||
|
@ -258,9 +260,10 @@ static int __devinit mpc5xxx_can_probe(struct platform_device *ofdev)
|
||||||
int irq, mscan_clksrc = 0;
|
int irq, mscan_clksrc = 0;
|
||||||
int err = -ENOMEM;
|
int err = -ENOMEM;
|
||||||
|
|
||||||
if (!ofdev->dev.of_match)
|
match = of_match_device(mpc5xxx_can_table, &ofdev->dev);
|
||||||
|
if (!match)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
data = (struct mpc5xxx_can_data *)ofdev->dev.of_match->data;
|
data = match->data;
|
||||||
|
|
||||||
base = of_iomap(np, 0);
|
base = of_iomap(np, 0);
|
||||||
if (!base) {
|
if (!base) {
|
||||||
|
|
|
@ -998,8 +998,10 @@ static const struct net_device_ops fs_enet_netdev_ops = {
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct of_device_id fs_enet_match[];
|
||||||
static int __devinit fs_enet_probe(struct platform_device *ofdev)
|
static int __devinit fs_enet_probe(struct platform_device *ofdev)
|
||||||
{
|
{
|
||||||
|
const struct of_device_id *match;
|
||||||
struct net_device *ndev;
|
struct net_device *ndev;
|
||||||
struct fs_enet_private *fep;
|
struct fs_enet_private *fep;
|
||||||
struct fs_platform_info *fpi;
|
struct fs_platform_info *fpi;
|
||||||
|
@ -1007,14 +1009,15 @@ static int __devinit fs_enet_probe(struct platform_device *ofdev)
|
||||||
const u8 *mac_addr;
|
const u8 *mac_addr;
|
||||||
int privsize, len, ret = -ENODEV;
|
int privsize, len, ret = -ENODEV;
|
||||||
|
|
||||||
if (!ofdev->dev.of_match)
|
match = of_match_device(fs_enet_match, &ofdev->dev);
|
||||||
|
if (!match)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
fpi = kzalloc(sizeof(*fpi), GFP_KERNEL);
|
fpi = kzalloc(sizeof(*fpi), GFP_KERNEL);
|
||||||
if (!fpi)
|
if (!fpi)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
if (!IS_FEC(ofdev->dev.of_match)) {
|
if (!IS_FEC(match)) {
|
||||||
data = of_get_property(ofdev->dev.of_node, "fsl,cpm-command", &len);
|
data = of_get_property(ofdev->dev.of_node, "fsl,cpm-command", &len);
|
||||||
if (!data || len != 4)
|
if (!data || len != 4)
|
||||||
goto out_free_fpi;
|
goto out_free_fpi;
|
||||||
|
@ -1049,7 +1052,7 @@ static int __devinit fs_enet_probe(struct platform_device *ofdev)
|
||||||
fep->dev = &ofdev->dev;
|
fep->dev = &ofdev->dev;
|
||||||
fep->ndev = ndev;
|
fep->ndev = ndev;
|
||||||
fep->fpi = fpi;
|
fep->fpi = fpi;
|
||||||
fep->ops = ofdev->dev.of_match->data;
|
fep->ops = match->data;
|
||||||
|
|
||||||
ret = fep->ops->setup_data(ndev);
|
ret = fep->ops->setup_data(ndev);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
|
|
@ -101,17 +101,20 @@ static int fs_enet_fec_mii_reset(struct mii_bus *bus)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct of_device_id fs_enet_mdio_fec_match[];
|
||||||
static int __devinit fs_enet_mdio_probe(struct platform_device *ofdev)
|
static int __devinit fs_enet_mdio_probe(struct platform_device *ofdev)
|
||||||
{
|
{
|
||||||
|
const struct of_device_id *match;
|
||||||
struct resource res;
|
struct resource res;
|
||||||
struct mii_bus *new_bus;
|
struct mii_bus *new_bus;
|
||||||
struct fec_info *fec;
|
struct fec_info *fec;
|
||||||
int (*get_bus_freq)(struct device_node *);
|
int (*get_bus_freq)(struct device_node *);
|
||||||
int ret = -ENOMEM, clock, speed;
|
int ret = -ENOMEM, clock, speed;
|
||||||
|
|
||||||
if (!ofdev->dev.of_match)
|
match = of_match_device(fs_enet_mdio_fec_match, &ofdev->dev);
|
||||||
|
if (!match)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
get_bus_freq = ofdev->dev.of_match->data;
|
get_bus_freq = match->data;
|
||||||
|
|
||||||
new_bus = mdiobus_alloc();
|
new_bus = mdiobus_alloc();
|
||||||
if (!new_bus)
|
if (!new_bus)
|
||||||
|
|
|
@ -3237,15 +3237,18 @@ static void happy_meal_pci_exit(void)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_SBUS
|
#ifdef CONFIG_SBUS
|
||||||
|
static const struct of_device_id hme_sbus_match[];
|
||||||
static int __devinit hme_sbus_probe(struct platform_device *op)
|
static int __devinit hme_sbus_probe(struct platform_device *op)
|
||||||
{
|
{
|
||||||
|
const struct of_device_id *match;
|
||||||
struct device_node *dp = op->dev.of_node;
|
struct device_node *dp = op->dev.of_node;
|
||||||
const char *model = of_get_property(dp, "model", NULL);
|
const char *model = of_get_property(dp, "model", NULL);
|
||||||
int is_qfe;
|
int is_qfe;
|
||||||
|
|
||||||
if (!op->dev.of_match)
|
match = of_match_device(hme_sbus_match, &op->dev);
|
||||||
|
if (!match)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
is_qfe = (op->dev.of_match->data != NULL);
|
is_qfe = (match->data != NULL);
|
||||||
|
|
||||||
if (!is_qfe && model && !strcmp(model, "SUNW,sbus-qfe"))
|
if (!is_qfe && model && !strcmp(model, "SUNW,sbus-qfe"))
|
||||||
is_qfe = 1;
|
is_qfe = 1;
|
||||||
|
|
|
@ -1292,8 +1292,10 @@ static struct scsi_host_template qpti_template = {
|
||||||
.use_clustering = ENABLE_CLUSTERING,
|
.use_clustering = ENABLE_CLUSTERING,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const struct of_device_id qpti_match[];
|
||||||
static int __devinit qpti_sbus_probe(struct platform_device *op)
|
static int __devinit qpti_sbus_probe(struct platform_device *op)
|
||||||
{
|
{
|
||||||
|
const struct of_device_id *match;
|
||||||
struct scsi_host_template *tpnt;
|
struct scsi_host_template *tpnt;
|
||||||
struct device_node *dp = op->dev.of_node;
|
struct device_node *dp = op->dev.of_node;
|
||||||
struct Scsi_Host *host;
|
struct Scsi_Host *host;
|
||||||
|
@ -1301,9 +1303,10 @@ static int __devinit qpti_sbus_probe(struct platform_device *op)
|
||||||
static int nqptis;
|
static int nqptis;
|
||||||
const char *fcode;
|
const char *fcode;
|
||||||
|
|
||||||
if (!op->dev.of_match)
|
match = of_match_device(qpti_match, &op->dev);
|
||||||
|
if (!match)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
tpnt = op->dev.of_match->data;
|
tpnt = match->data;
|
||||||
|
|
||||||
/* Sometimes Antares cards come up not completely
|
/* Sometimes Antares cards come up not completely
|
||||||
* setup, and we get a report of a zero IRQ.
|
* setup, and we get a report of a zero IRQ.
|
||||||
|
|
|
@ -80,14 +80,17 @@ static int __devinit of_platform_serial_setup(struct platform_device *ofdev,
|
||||||
/*
|
/*
|
||||||
* Try to register a serial port
|
* Try to register a serial port
|
||||||
*/
|
*/
|
||||||
|
static struct of_device_id of_platform_serial_table[];
|
||||||
static int __devinit of_platform_serial_probe(struct platform_device *ofdev)
|
static int __devinit of_platform_serial_probe(struct platform_device *ofdev)
|
||||||
{
|
{
|
||||||
|
const struct of_device_id *match;
|
||||||
struct of_serial_info *info;
|
struct of_serial_info *info;
|
||||||
struct uart_port port;
|
struct uart_port port;
|
||||||
int port_type;
|
int port_type;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!ofdev->dev.of_match)
|
match = of_match_device(of_platform_serial_table, &ofdev->dev);
|
||||||
|
if (!match)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (of_find_property(ofdev->dev.of_node, "used-by-rtas", NULL))
|
if (of_find_property(ofdev->dev.of_node, "used-by-rtas", NULL))
|
||||||
|
@ -97,7 +100,7 @@ static int __devinit of_platform_serial_probe(struct platform_device *ofdev)
|
||||||
if (info == NULL)
|
if (info == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
port_type = (unsigned long)ofdev->dev.of_match->data;
|
port_type = (unsigned long)match->data;
|
||||||
ret = of_platform_serial_setup(ofdev, port_type, &port);
|
ret = of_platform_serial_setup(ofdev, port_type, &port);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
|
@ -2539,15 +2539,18 @@ static void qe_udc_release(struct device *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Driver probe functions */
|
/* Driver probe functions */
|
||||||
|
static const struct of_device_id qe_udc_match[];
|
||||||
static int __devinit qe_udc_probe(struct platform_device *ofdev)
|
static int __devinit qe_udc_probe(struct platform_device *ofdev)
|
||||||
{
|
{
|
||||||
|
const struct of_device_id *match;
|
||||||
struct device_node *np = ofdev->dev.of_node;
|
struct device_node *np = ofdev->dev.of_node;
|
||||||
struct qe_ep *ep;
|
struct qe_ep *ep;
|
||||||
unsigned int ret = 0;
|
unsigned int ret = 0;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
const void *prop;
|
const void *prop;
|
||||||
|
|
||||||
if (!ofdev->dev.of_match)
|
match = of_match_device(qe_udc_match, &ofdev->dev);
|
||||||
|
if (!match)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
prop = of_get_property(np, "mode", NULL);
|
prop = of_get_property(np, "mode", NULL);
|
||||||
|
@ -2561,7 +2564,7 @@ static int __devinit qe_udc_probe(struct platform_device *ofdev)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
udc_controller->soc_type = (unsigned long)ofdev->dev.of_match->data;
|
udc_controller->soc_type = (unsigned long)match->data;
|
||||||
udc_controller->usb_regs = of_iomap(np, 0);
|
udc_controller->usb_regs = of_iomap(np, 0);
|
||||||
if (!udc_controller->usb_regs) {
|
if (!udc_controller->usb_regs) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
|
|
|
@ -185,17 +185,20 @@ static struct miscdevice mpc8xxx_wdt_miscdev = {
|
||||||
.fops = &mpc8xxx_wdt_fops,
|
.fops = &mpc8xxx_wdt_fops,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const struct of_device_id mpc8xxx_wdt_match[];
|
||||||
static int __devinit mpc8xxx_wdt_probe(struct platform_device *ofdev)
|
static int __devinit mpc8xxx_wdt_probe(struct platform_device *ofdev)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
const struct of_device_id *match;
|
||||||
struct device_node *np = ofdev->dev.of_node;
|
struct device_node *np = ofdev->dev.of_node;
|
||||||
struct mpc8xxx_wdt_type *wdt_type;
|
struct mpc8xxx_wdt_type *wdt_type;
|
||||||
u32 freq = fsl_get_sys_freq();
|
u32 freq = fsl_get_sys_freq();
|
||||||
bool enabled;
|
bool enabled;
|
||||||
|
|
||||||
if (!ofdev->dev.of_match)
|
match = of_match_device(mpc8xxx_wdt_match, &ofdev->dev);
|
||||||
|
if (!match)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
wdt_type = ofdev->dev.of_match->data;
|
wdt_type = match->data;
|
||||||
|
|
||||||
if (!freq || freq == -1)
|
if (!freq || freq == -1)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
|
@ -442,7 +442,6 @@ struct device {
|
||||||
struct dev_archdata archdata;
|
struct dev_archdata archdata;
|
||||||
|
|
||||||
struct device_node *of_node; /* associated device tree node */
|
struct device_node *of_node; /* associated device tree node */
|
||||||
const struct of_device_id *of_match; /* matching of_device_id from driver */
|
|
||||||
|
|
||||||
dev_t devt; /* dev_t, creates the sysfs "dev" */
|
dev_t devt; /* dev_t, creates the sysfs "dev" */
|
||||||
|
|
||||||
|
|
|
@ -21,8 +21,7 @@ extern void of_device_make_bus_id(struct device *dev);
|
||||||
static inline int of_driver_match_device(struct device *dev,
|
static inline int of_driver_match_device(struct device *dev,
|
||||||
const struct device_driver *drv)
|
const struct device_driver *drv)
|
||||||
{
|
{
|
||||||
dev->of_match = of_match_device(drv->of_match_table, dev);
|
return of_match_device(drv->of_match_table, dev) != NULL;
|
||||||
return dev->of_match != NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern struct platform_device *of_dev_get(struct platform_device *dev);
|
extern struct platform_device *of_dev_get(struct platform_device *dev);
|
||||||
|
@ -58,6 +57,11 @@ static inline int of_device_uevent(struct device *dev,
|
||||||
|
|
||||||
static inline void of_device_node_put(struct device *dev) { }
|
static inline void of_device_node_put(struct device *dev) { }
|
||||||
|
|
||||||
|
static inline const struct of_device_id *of_match_device(
|
||||||
|
const struct of_device_id *matches, const struct device *dev)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
#endif /* CONFIG_OF_DEVICE */
|
#endif /* CONFIG_OF_DEVICE */
|
||||||
|
|
||||||
#endif /* _LINUX_OF_DEVICE_H */
|
#endif /* _LINUX_OF_DEVICE_H */
|
||||||
|
|
Loading…
Reference in New Issue