Linux Audio

Check our new training course

Buildroot integration, development and maintenance

Need a Buildroot system for your embedded project?
Loading...
v6.9.4
  1// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
  2/* Copyright 2019 NXP */
  3#include <linux/fsl/enetc_mdio.h>
  4#include <linux/of_mdio.h>
  5#include "enetc_pf.h"
  6
  7#define ENETC_MDIO_DEV_ID	0xee01
  8#define ENETC_MDIO_DEV_NAME	"FSL PCIe IE Central MDIO"
  9#define ENETC_MDIO_BUS_NAME	ENETC_MDIO_DEV_NAME " Bus"
 10#define ENETC_MDIO_DRV_NAME	ENETC_MDIO_DEV_NAME " driver"
 11
 12static int enetc_pci_mdio_probe(struct pci_dev *pdev,
 13				const struct pci_device_id *ent)
 14{
 15	struct enetc_mdio_priv *mdio_priv;
 16	struct device *dev = &pdev->dev;
 17	void __iomem *port_regs;
 18	struct enetc_hw *hw;
 19	struct mii_bus *bus;
 20	int err;
 21
 22	port_regs = pci_iomap(pdev, 0, 0);
 23	if (!port_regs) {
 24		dev_err(dev, "iomap failed\n");
 25		err = -ENXIO;
 26		goto err_ioremap;
 27	}
 28
 29	hw = enetc_hw_alloc(dev, port_regs);
 30	if (IS_ERR(hw)) {
 31		err = PTR_ERR(hw);
 32		goto err_hw_alloc;
 33	}
 34
 35	bus = devm_mdiobus_alloc_size(dev, sizeof(*mdio_priv));
 36	if (!bus) {
 37		err = -ENOMEM;
 38		goto err_mdiobus_alloc;
 39	}
 40
 41	bus->name = ENETC_MDIO_BUS_NAME;
 42	bus->read = enetc_mdio_read_c22;
 43	bus->write = enetc_mdio_write_c22;
 44	bus->read_c45 = enetc_mdio_read_c45;
 45	bus->write_c45 = enetc_mdio_write_c45;
 46	bus->parent = dev;
 47	mdio_priv = bus->priv;
 48	mdio_priv->hw = hw;
 49	mdio_priv->mdio_base = ENETC_EMDIO_BASE;
 50	snprintf(bus->id, MII_BUS_ID_SIZE, "%s", dev_name(dev));
 51
 52	pcie_flr(pdev);
 53	err = pci_enable_device_mem(pdev);
 54	if (err) {
 55		dev_err(dev, "device enable failed\n");
 56		goto err_pci_enable;
 57	}
 58
 59	err = pci_request_region(pdev, 0, KBUILD_MODNAME);
 60	if (err) {
 61		dev_err(dev, "pci_request_region failed\n");
 62		goto err_pci_mem_reg;
 63	}
 64
 65	err = of_mdiobus_register(bus, dev->of_node);
 66	if (err)
 67		goto err_mdiobus_reg;
 68
 69	pci_set_drvdata(pdev, bus);
 70
 71	return 0;
 72
 73err_mdiobus_reg:
 74	pci_release_region(pdev, 0);
 75err_pci_mem_reg:
 76	pci_disable_device(pdev);
 77err_pci_enable:
 78err_mdiobus_alloc:
 79err_hw_alloc:
 80	iounmap(port_regs);
 81err_ioremap:
 82	return err;
 83}
 84
 85static void enetc_pci_mdio_remove(struct pci_dev *pdev)
 86{
 87	struct mii_bus *bus = pci_get_drvdata(pdev);
 88	struct enetc_mdio_priv *mdio_priv;
 89
 90	mdiobus_unregister(bus);
 91	mdio_priv = bus->priv;
 92	iounmap(mdio_priv->hw->port);
 93	pci_release_region(pdev, 0);
 94	pci_disable_device(pdev);
 95}
 96
 97static const struct pci_device_id enetc_pci_mdio_id_table[] = {
 98	{ PCI_DEVICE(PCI_VENDOR_ID_FREESCALE, ENETC_MDIO_DEV_ID) },
 99	{ 0, } /* End of table. */
100};
101MODULE_DEVICE_TABLE(pci, enetc_pci_mdio_id_table);
102
103static struct pci_driver enetc_pci_mdio_driver = {
104	.name = KBUILD_MODNAME,
105	.id_table = enetc_pci_mdio_id_table,
106	.probe = enetc_pci_mdio_probe,
107	.remove = enetc_pci_mdio_remove,
108};
109module_pci_driver(enetc_pci_mdio_driver);
110
111MODULE_DESCRIPTION(ENETC_MDIO_DRV_NAME);
112MODULE_LICENSE("Dual BSD/GPL");
v5.14.15
  1// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
  2/* Copyright 2019 NXP */
  3#include <linux/fsl/enetc_mdio.h>
  4#include <linux/of_mdio.h>
  5#include "enetc_pf.h"
  6
  7#define ENETC_MDIO_DEV_ID	0xee01
  8#define ENETC_MDIO_DEV_NAME	"FSL PCIe IE Central MDIO"
  9#define ENETC_MDIO_BUS_NAME	ENETC_MDIO_DEV_NAME " Bus"
 10#define ENETC_MDIO_DRV_NAME	ENETC_MDIO_DEV_NAME " driver"
 11
 12static int enetc_pci_mdio_probe(struct pci_dev *pdev,
 13				const struct pci_device_id *ent)
 14{
 15	struct enetc_mdio_priv *mdio_priv;
 16	struct device *dev = &pdev->dev;
 17	void __iomem *port_regs;
 18	struct enetc_hw *hw;
 19	struct mii_bus *bus;
 20	int err;
 21
 22	port_regs = pci_iomap(pdev, 0, 0);
 23	if (!port_regs) {
 24		dev_err(dev, "iomap failed\n");
 25		err = -ENXIO;
 26		goto err_ioremap;
 27	}
 28
 29	hw = enetc_hw_alloc(dev, port_regs);
 30	if (IS_ERR(hw)) {
 31		err = PTR_ERR(hw);
 32		goto err_hw_alloc;
 33	}
 34
 35	bus = devm_mdiobus_alloc_size(dev, sizeof(*mdio_priv));
 36	if (!bus) {
 37		err = -ENOMEM;
 38		goto err_mdiobus_alloc;
 39	}
 40
 41	bus->name = ENETC_MDIO_BUS_NAME;
 42	bus->read = enetc_mdio_read;
 43	bus->write = enetc_mdio_write;
 
 
 44	bus->parent = dev;
 45	mdio_priv = bus->priv;
 46	mdio_priv->hw = hw;
 47	mdio_priv->mdio_base = ENETC_EMDIO_BASE;
 48	snprintf(bus->id, MII_BUS_ID_SIZE, "%s", dev_name(dev));
 49
 50	pcie_flr(pdev);
 51	err = pci_enable_device_mem(pdev);
 52	if (err) {
 53		dev_err(dev, "device enable failed\n");
 54		goto err_pci_enable;
 55	}
 56
 57	err = pci_request_region(pdev, 0, KBUILD_MODNAME);
 58	if (err) {
 59		dev_err(dev, "pci_request_region failed\n");
 60		goto err_pci_mem_reg;
 61	}
 62
 63	err = of_mdiobus_register(bus, dev->of_node);
 64	if (err)
 65		goto err_mdiobus_reg;
 66
 67	pci_set_drvdata(pdev, bus);
 68
 69	return 0;
 70
 71err_mdiobus_reg:
 72	pci_release_mem_regions(pdev);
 73err_pci_mem_reg:
 74	pci_disable_device(pdev);
 75err_pci_enable:
 76err_mdiobus_alloc:
 77err_hw_alloc:
 78	iounmap(port_regs);
 79err_ioremap:
 80	return err;
 81}
 82
 83static void enetc_pci_mdio_remove(struct pci_dev *pdev)
 84{
 85	struct mii_bus *bus = pci_get_drvdata(pdev);
 86	struct enetc_mdio_priv *mdio_priv;
 87
 88	mdiobus_unregister(bus);
 89	mdio_priv = bus->priv;
 90	iounmap(mdio_priv->hw->port);
 91	pci_release_mem_regions(pdev);
 92	pci_disable_device(pdev);
 93}
 94
 95static const struct pci_device_id enetc_pci_mdio_id_table[] = {
 96	{ PCI_DEVICE(PCI_VENDOR_ID_FREESCALE, ENETC_MDIO_DEV_ID) },
 97	{ 0, } /* End of table. */
 98};
 99MODULE_DEVICE_TABLE(pci, enetc_pci_mdio_id_table);
100
101static struct pci_driver enetc_pci_mdio_driver = {
102	.name = KBUILD_MODNAME,
103	.id_table = enetc_pci_mdio_id_table,
104	.probe = enetc_pci_mdio_probe,
105	.remove = enetc_pci_mdio_remove,
106};
107module_pci_driver(enetc_pci_mdio_driver);
108
109MODULE_DESCRIPTION(ENETC_MDIO_DRV_NAME);
110MODULE_LICENSE("Dual BSD/GPL");