]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
lantiq: refresh 6.18 kernel patches
authorShiji Yang <yangshiji66@outlook.com>
Fri, 10 Apr 2026 15:06:46 +0000 (23:06 +0800)
committerNick Hainke <vincent@systemli.org>
Thu, 23 Apr 2026 13:54:47 +0000 (15:54 +0200)
Manually resolve the patch conflicts on new LTS kernel.

Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
Link: https://github.com/openwrt/openwrt/pull/22922
Signed-off-by: Nick Hainke <vincent@systemli.org>
target/linux/lantiq/patches-6.18/001-MIPS-lantiq-add-pcie-driver.patch
target/linux/lantiq/patches-6.18/004-MIPS-lantiq-add-atm-hack.patch
target/linux/lantiq/patches-6.18/028-NET-lantiq-various-etop-fixes.patch
target/linux/lantiq/patches-6.18/031-I2C-MIPS-lantiq-add-FALC-ON-i2c-bus-master.patch
target/linux/lantiq/patches-6.18/035-owrt-lantiq-wifi-and-ethernet-eeprom-handling.patch
target/linux/lantiq/patches-6.18/152-lantiq-VPE.patch
target/linux/lantiq/patches-6.18/200-MIPS-lantiq-xway-vmmc-use-platform_get_irq-to-get-ir.patch
target/linux/lantiq/patches-6.18/701-NET-lantiq-etop-of-mido.patch

index e7cef44501b155569ee4c28fd005777e306830c9..6cbc67e29d2123c1e288664186113c55ca7a48bb 100644 (file)
@@ -4156,7 +4156,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 +#endif /* IFXMIPS_PCIE_VR9_H */
 --- a/arch/mips/pci/pci-legacy.c
 +++ b/arch/mips/pci/pci-legacy.c
-@@ -312,3 +312,30 @@ char *__init pcibios_setup(char *str)
+@@ -278,3 +278,30 @@ char *__init pcibios_setup(char *str)
                return pcibios_plat_setup(str);
        return str;
  }
@@ -5518,18 +5518,18 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
          (transaction layer end-to-end CRC checking).
 --- a/include/linux/pci.h
 +++ b/include/linux/pci.h
-@@ -1658,6 +1658,8 @@ void pci_walk_bus_locked(struct pci_bus
-                        void *userdata);
+@@ -1660,6 +1660,8 @@ void pci_walk_bus(struct pci_bus *top, i
+                 void *userdata);
  int pci_cfg_space_size(struct pci_dev *dev);
  unsigned char pci_bus_max_busnr(struct pci_bus *bus);
 +int pcibios_host_nr(void);
 +int pcibios_1st_host_bus_nr(void);
- void pci_setup_bridge(struct pci_bus *bus);
  resource_size_t pcibios_window_alignment(struct pci_bus *bus,
                                         unsigned long type);
 --- a/include/linux/pci_ids.h
 +++ b/include/linux/pci_ids.h
-@@ -1111,6 +1111,12 @@
+@@ -1114,6 +1114,12 @@
  #define PCI_DEVICE_ID_SGI_IOC3                0x0003
  #define PCI_DEVICE_ID_SGI_LITHIUM     0x1002
  
index 2e36b41beb8c95d960cba76841345a22daf8749d..637560d51684d785a3eb140ae4e9b61cd93c82e6 100644 (file)
@@ -431,7 +431,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
  
  #include <asm/bootinfo.h>
  #include <asm/irq_cpu.h>
-@@ -92,6 +93,7 @@ void ltq_disable_irq(struct irq_data *d)
+@@ -93,6 +94,7 @@ void ltq_disable_irq(struct irq_data *d)
        }
        raw_spin_unlock_irqrestore(&ltq_icu_lock, flags);
  }
index 7987e87dffd5ecde644e2bcff3adccbf81cfdc10..24935b9222aa95b09d42be6a371ac7ff472dc08f 100644 (file)
@@ -152,12 +152,11 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
        struct net_device *netdev;
        struct napi_struct napi;
        struct ltq_dma_channel dma;
-@@ -89,25 +140,39 @@ struct ltq_etop_chan {
+@@ -89,24 +140,38 @@ struct ltq_etop_chan {
  struct ltq_etop_priv {
        struct net_device *netdev;
        struct platform_device *pdev;
 -      struct ltq_eth_data *pldata;
-       struct resource *res;
  
        struct mii_bus *mii_bus;
  
@@ -195,7 +194,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
        if (!ch->skb[ch->dma.desc])
                return -ENOMEM;
        ch->dma.desc_base[ch->dma.desc].addr =
-@@ -142,8 +207,11 @@ ltq_etop_hw_receive(struct ltq_etop_chan
+@@ -141,8 +206,11 @@ ltq_etop_hw_receive(struct ltq_etop_chan
        spin_unlock_irqrestore(&priv->lock, flags);
  
        skb_put(skb, len);
@@ -207,7 +206,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
  }
  
  static int
-@@ -151,7 +219,9 @@ ltq_etop_poll_rx(struct napi_struct *nap
+@@ -150,7 +218,9 @@ ltq_etop_poll_rx(struct napi_struct *nap
  {
        struct ltq_etop_chan *ch = container_of(napi,
                                struct ltq_etop_chan, napi);
@@ -217,7 +216,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
  
        while (work_done < budget) {
                struct ltq_dma_desc *desc = &ch->dma.desc_base[ch->dma.desc];
-@@ -163,7 +233,9 @@ ltq_etop_poll_rx(struct napi_struct *nap
+@@ -162,7 +232,9 @@ ltq_etop_poll_rx(struct napi_struct *nap
        }
        if (work_done < budget) {
                napi_complete_done(&ch->napi, work_done);
@@ -227,7 +226,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
        }
        return work_done;
  }
-@@ -175,12 +247,14 @@ ltq_etop_poll_tx(struct napi_struct *nap
+@@ -174,12 +246,14 @@ ltq_etop_poll_tx(struct napi_struct *nap
                container_of(napi, struct ltq_etop_chan, napi);
        struct ltq_etop_priv *priv = netdev_priv(ch->netdev);
        struct netdev_queue *txq =
@@ -243,7 +242,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
                dev_kfree_skb_any(ch->skb[ch->tx_free]);
                ch->skb[ch->tx_free] = NULL;
                memset(&ch->dma.desc_base[ch->tx_free], 0,
-@@ -193,7 +267,9 @@ ltq_etop_poll_tx(struct napi_struct *nap
+@@ -192,7 +266,9 @@ ltq_etop_poll_tx(struct napi_struct *nap
        if (netif_tx_queue_stopped(txq))
                netif_tx_start_queue(txq);
        napi_complete(&ch->napi);
@@ -253,7 +252,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
        return 1;
  }
  
-@@ -201,9 +277,11 @@ static irqreturn_t
+@@ -200,9 +276,11 @@ static irqreturn_t
  ltq_etop_dma_irq(int irq, void *_priv)
  {
        struct ltq_etop_priv *priv = _priv;
@@ -267,7 +266,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
        return IRQ_HANDLED;
  }
  
-@@ -215,7 +293,7 @@ ltq_etop_free_channel(struct net_device
+@@ -214,7 +292,7 @@ ltq_etop_free_channel(struct net_device
        ltq_dma_free(&ch->dma);
        if (ch->dma.irq)
                free_irq(ch->dma.irq, priv);
@@ -276,7 +275,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
                struct ltq_dma_channel *dma = &ch->dma;
  
                for (dma->desc = 0; dma->desc < LTQ_DESC_NUM; dma->desc++)
-@@ -227,80 +305,137 @@ static void
+@@ -226,80 +304,137 @@ static void
  ltq_etop_hw_exit(struct net_device *dev)
  {
        struct ltq_etop_priv *priv = netdev_priv(dev);
@@ -463,7 +462,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
  }
  
  static void
-@@ -319,6 +454,39 @@ static const struct ethtool_ops ltq_etop
+@@ -318,6 +453,39 @@ static const struct ethtool_ops ltq_etop
  };
  
  static int
@@ -503,7 +502,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
  ltq_etop_mdio_wr(struct mii_bus *bus, int phy_addr, int phy_reg, u16 phy_data)
  {
        u32 val = MDIO_REQUEST |
-@@ -326,9 +494,9 @@ ltq_etop_mdio_wr(struct mii_bus *bus, in
+@@ -325,9 +493,9 @@ ltq_etop_mdio_wr(struct mii_bus *bus, in
                ((phy_reg & MDIO_REG_MASK) << MDIO_REG_OFFSET) |
                phy_data;
  
@@ -515,7 +514,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
        return 0;
  }
  
-@@ -339,12 +507,12 @@ ltq_etop_mdio_rd(struct mii_bus *bus, in
+@@ -338,12 +506,12 @@ ltq_etop_mdio_rd(struct mii_bus *bus, in
                ((phy_addr & MDIO_ADDR_MASK) << MDIO_ADDR_OFFSET) |
                ((phy_reg & MDIO_REG_MASK) << MDIO_REG_OFFSET);
  
@@ -532,7 +531,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
        return val;
  }
  
-@@ -360,7 +528,10 @@ ltq_etop_mdio_probe(struct net_device *d
+@@ -359,7 +527,10 @@ ltq_etop_mdio_probe(struct net_device *d
        struct ltq_etop_priv *priv = netdev_priv(dev);
        struct phy_device *phydev;
  
@@ -544,7 +543,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
  
        if (!phydev) {
                netdev_err(dev, "no PHY found\n");
-@@ -368,14 +539,17 @@ ltq_etop_mdio_probe(struct net_device *d
+@@ -367,14 +538,17 @@ ltq_etop_mdio_probe(struct net_device *d
        }
  
        phydev = phy_connect(dev, phydev_name(phydev),
@@ -564,7 +563,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
  
        phy_attached_info(phydev);
  
-@@ -396,8 +570,13 @@ ltq_etop_mdio_init(struct net_device *de
+@@ -395,8 +569,13 @@ ltq_etop_mdio_init(struct net_device *de
        }
  
        priv->mii_bus->priv = dev;
@@ -580,7 +579,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
        priv->mii_bus->name = "ltq_mii";
        snprintf(priv->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x",
                 priv->pdev->name, priv->pdev->id);
-@@ -434,18 +613,21 @@ static int
+@@ -433,18 +612,21 @@ static int
  ltq_etop_open(struct net_device *dev)
  {
        struct ltq_etop_priv *priv = netdev_priv(dev);
@@ -612,7 +611,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
        netif_tx_start_all_queues(dev);
        return 0;
  }
-@@ -454,18 +636,19 @@ static int
+@@ -453,18 +635,19 @@ static int
  ltq_etop_stop(struct net_device *dev)
  {
        struct ltq_etop_priv *priv = netdev_priv(dev);
@@ -642,7 +641,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
        return 0;
  }
  
-@@ -475,17 +658,21 @@ ltq_etop_tx(struct sk_buff *skb, struct
+@@ -474,17 +657,21 @@ ltq_etop_tx(struct sk_buff *skb, struct
        int queue = skb_get_queue_mapping(skb);
        struct netdev_queue *txq = netdev_get_tx_queue(dev, queue);
        struct ltq_etop_priv *priv = netdev_priv(dev);
@@ -669,7 +668,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
                netdev_err(dev, "tx ring full\n");
                netif_tx_stop_queue(txq);
                return NETDEV_TX_BUSY;
-@@ -493,7 +680,7 @@ ltq_etop_tx(struct sk_buff *skb, struct
+@@ -492,7 +679,7 @@ ltq_etop_tx(struct sk_buff *skb, struct
  
        /* dma needs to start on a burst length value aligned address */
        byte_offset = CPHYSADDR(skb->data) % (priv->tx_burst_len * 4);
@@ -678,7 +677,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
  
        netif_trans_update(dev);
  
-@@ -504,11 +691,11 @@ ltq_etop_tx(struct sk_buff *skb, struct
+@@ -503,11 +690,11 @@ ltq_etop_tx(struct sk_buff *skb, struct
        wmb();
        desc->ctl = LTQ_DMA_OWN | LTQ_DMA_SOP | LTQ_DMA_EOP |
                LTQ_DMA_TX_OFFSET(byte_offset) | (len & LTQ_DMA_SIZE_MASK);
@@ -693,7 +692,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
                netif_tx_stop_queue(txq);
  
        return NETDEV_TX_OK;
-@@ -519,11 +706,14 @@ ltq_etop_change_mtu(struct net_device *d
+@@ -518,11 +705,14 @@ ltq_etop_change_mtu(struct net_device *d
  {
        struct ltq_etop_priv *priv = netdev_priv(dev);
        unsigned long flags;
@@ -709,7 +708,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
        spin_unlock_irqrestore(&priv->lock, flags);
  
        return 0;
-@@ -576,6 +766,9 @@ ltq_etop_init(struct net_device *dev)
+@@ -575,6 +765,9 @@ ltq_etop_init(struct net_device *dev)
        if (err)
                goto err_hw;
        ltq_etop_change_mtu(dev, 1500);
@@ -719,7 +718,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
  
        memcpy(&mac, &priv->pldata->mac, sizeof(struct sockaddr));
        if (!is_valid_ether_addr(mac.sa_data)) {
-@@ -593,9 +786,10 @@ ltq_etop_init(struct net_device *dev)
+@@ -592,9 +785,10 @@ ltq_etop_init(struct net_device *dev)
                dev->addr_assign_type = NET_ADDR_RANDOM;
  
        ltq_etop_set_multicast_list(dev);
@@ -733,7 +732,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
        return 0;
  
  err_netdev:
-@@ -615,6 +809,9 @@ ltq_etop_tx_timeout(struct net_device *d
+@@ -614,6 +808,9 @@ ltq_etop_tx_timeout(struct net_device *d
        err = ltq_etop_hw_init(dev);
        if (err)
                goto err_hw;
@@ -743,7 +742,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
        netif_trans_update(dev);
        netif_wake_queue(dev);
        return;
-@@ -638,14 +835,18 @@ static const struct net_device_ops ltq_e
+@@ -637,13 +834,18 @@ static const struct net_device_ops ltq_e
        .ndo_tx_timeout = ltq_etop_tx_timeout,
  };
  
@@ -753,8 +752,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
  {
        struct net_device *dev;
        struct ltq_etop_priv *priv;
--      struct resource *res;
-+      struct resource *res, *gbit_res, irqres[2];
++      struct resource *gbit_res, irqres[2];
        int err;
 -      int i;
 +
@@ -764,9 +762,9 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 +              return -EINVAL;
 +      }
  
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       if (!res) {
-@@ -671,18 +872,60 @@ ltq_etop_probe(struct platform_device *p
+       ltq_etop_membase = devm_platform_ioremap_resource(pdev, 0);
+       if (IS_ERR(ltq_etop_membase)) {
+@@ -653,17 +855,59 @@ ltq_etop_probe(struct platform_device *p
                goto err_out;
        }
  
@@ -795,7 +793,6 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
        dev->netdev_ops = &ltq_eth_netdev_ops;
 -      dev->ethtool_ops = &ltq_etop_ethtool_ops;
        priv = netdev_priv(dev);
-       priv->res = res;
        priv->pdev = pdev;
 -      priv->pldata = dev_get_platdata(&pdev->dev);
        priv->netdev = dev;
@@ -833,7 +830,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
        spin_lock_init(&priv->lock);
        SET_NETDEV_DEV(dev, &pdev->dev);
  
-@@ -698,15 +941,10 @@ ltq_etop_probe(struct platform_device *p
+@@ -679,15 +923,10 @@ ltq_etop_probe(struct platform_device *p
                goto err_free;
        }
  
@@ -853,7 +850,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
  
        err = register_netdev(dev);
        if (err)
-@@ -733,31 +971,22 @@ static void ltq_etop_remove(struct platf
+@@ -714,31 +953,22 @@ static void ltq_etop_remove(struct platf
        }
  }
  
@@ -865,7 +862,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 +
  static struct platform_driver ltq_mii_driver = {
 +      .probe = ltq_etop_probe,
-       .remove_new = ltq_etop_remove,
+       .remove = ltq_etop_remove,
        .driver = {
                .name = "ltq_etop",
 +              .of_match_table = ltq_etop_match,
index 27159c7c50bbe0b7b0bb935e45319814fed0024d..295fa82611810c4a104b36600c74f364bf55df2d 100644 (file)
@@ -18,7 +18,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 
 --- a/drivers/i2c/busses/Kconfig
 +++ b/drivers/i2c/busses/Kconfig
-@@ -857,6 +857,16 @@ config I2C_MICROCHIP_CORE
+@@ -889,6 +889,16 @@ config I2C_MICROCHIP_CORE
          This driver can also be built as a module. If so, the module will be
          called i2c-microchip-core.
  
@@ -37,8 +37,8 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
        depends on PPC
 --- a/drivers/i2c/busses/Makefile
 +++ b/drivers/i2c/busses/Makefile
-@@ -78,6 +78,7 @@ obj-$(CONFIG_I2C_IOP3XX)     += i2c-iop3xx.o
- obj-$(CONFIG_I2C_JZ4780)      += i2c-jz4780.o
+@@ -78,6 +78,7 @@ obj-$(CONFIG_I2C_JZ4780)     += i2c-jz4780.o
+ obj-$(CONFIG_I2C_K1)          += i2c-k1.o
  obj-$(CONFIG_I2C_KEBA)                += i2c-keba.o
  obj-$(CONFIG_I2C_KEMPLD)      += i2c-kempld.o
 +obj-$(CONFIG_I2C_LANTIQ)      += i2c-lantiq.o
index 10f2d4086d3f49d1b53ee8d7a80c99a1dad6ad74..cc5b6e9465833385b26aaf04dc2d6339f0e1bc84 100644 (file)
@@ -16,9 +16,9 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 
 --- a/arch/mips/include/asm/mach-lantiq/xway/lantiq_soc.h
 +++ b/arch/mips/include/asm/mach-lantiq/xway/lantiq_soc.h
-@@ -99,5 +99,8 @@ extern __iomem void *ltq_cgu_membase;
- extern void ltq_pmu_enable(unsigned int module);
- extern void ltq_pmu_disable(unsigned int module);
+@@ -102,5 +102,8 @@ extern void ltq_pmu_disable(unsigned int
+ /* VMMC */
+ extern unsigned int *ltq_get_cp1_base(void);
  
 +/* allow the ethernet driver to load a flash mapped mac addr */
 +const u8* ltq_get_eth_mac(void);
@@ -224,7 +224,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
  
 --- a/drivers/net/ethernet/lantiq_etop.c
 +++ b/drivers/net/ethernet/lantiq_etop.c
-@@ -770,7 +770,11 @@ ltq_etop_init(struct net_device *dev)
+@@ -769,7 +769,11 @@ ltq_etop_init(struct net_device *dev)
        if (err)
                goto err_hw;
  
index 66e1cd8ea71f711349017418bb08e9e091e330b4..959fc02a157f78b4679d093d12a7f6111a911c72 100644 (file)
@@ -15,7 +15,7 @@ Signed-off-by: Stefan Koch <stefan.koch10@gmail.com>
 
 --- a/arch/mips/Kconfig
 +++ b/arch/mips/Kconfig
-@@ -2251,6 +2251,12 @@ config MIPS_VPE_LOADER
+@@ -2267,6 +2267,12 @@ config MIPS_VPE_LOADER
          Includes a loader for loading an elf relocatable object
          onto another VPE and running it.
  
@@ -126,7 +126,7 @@ Signed-off-by: Stefan Koch <stefan.koch10@gmail.com>
 +#endif
 --- a/arch/mips/kernel/vpe.c
 +++ b/arch/mips/kernel/vpe.c
-@@ -49,6 +49,41 @@ struct vpe_control vpecontrol = {
+@@ -50,6 +50,41 @@ struct vpe_control vpecontrol = {
        .tc_list        = LIST_HEAD_INIT(vpecontrol.tc_list)
  };
  
index 65164f6ac2e35648d14805e4d70e0d882931aa57..065462ddbffde8a3701079a65f4ff92d76bb405c 100644 (file)
@@ -99,7 +99,7 @@ Signed-off-by: Martin Schiller <ms@dev.tdt.de>
                gpio = devm_gpiod_get_index(&pdev->dev,
 --- a/arch/mips/include/asm/mach-lantiq/xway/lantiq_soc.h
 +++ b/arch/mips/include/asm/mach-lantiq/xway/lantiq_soc.h
-@@ -104,6 +104,9 @@ const u8* ltq_get_eth_mac(void);
+@@ -101,6 +101,9 @@ extern void ltq_pmu_disable(unsigned int
  
  /* VMMC */
  extern unsigned int *ltq_get_cp1_base(void);
@@ -107,5 +107,5 @@ Signed-off-by: Martin Schiller <ms@dev.tdt.de>
 +extern unsigned int ltq_get_mps_ad1_irq(void);
 +extern unsigned int ltq_get_mps_vc_irq(int idx);
  
#endif /* CONFIG_SOC_TYPE_XWAY */
- #endif /* _LTQ_XWAY_H__ */
/* allow the ethernet driver to load a flash mapped mac addr */
+ const u8* ltq_get_eth_mac(void);
index d4c7b4ff23ff0a3effa49d981c9f91192cdac160..e7e1f7ec1f44a6f1ba9c4fae6569956993d6ab4d 100644 (file)
@@ -18,7 +18,7 @@ Signed-off-by: Johann Neuhauser <johann@it-neuhauser.de>
  
  #include <asm/checksum.h>
  
-@@ -560,7 +561,8 @@ static int
+@@ -559,7 +560,8 @@ static int
  ltq_etop_mdio_init(struct net_device *dev)
  {
        struct ltq_etop_priv *priv = netdev_priv(dev);
@@ -28,7 +28,7 @@ Signed-off-by: Johann Neuhauser <johann@it-neuhauser.de>
  
        priv->mii_bus = mdiobus_alloc();
        if (!priv->mii_bus) {
-@@ -580,7 +582,15 @@ ltq_etop_mdio_init(struct net_device *de
+@@ -579,7 +581,15 @@ ltq_etop_mdio_init(struct net_device *de
        priv->mii_bus->name = "ltq_mii";
        snprintf(priv->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x",
                 priv->pdev->name, priv->pdev->id);