diff options
author | Romain Perier <romain.perier@gmail.com> | 2014-08-26 09:14:49 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-08-27 19:40:25 -0400 |
commit | f15f44e0839793ea03ffef5bae532cd63d92948c (patch) | |
tree | b16949d8e4e8e6a44cf5295053c9ff070a565678 /drivers/net/ethernet/arc/emac_main.c | |
parent | 253ff51635ad6690276ef065d59523c4bd1cd584 (diff) |
ethernet: arc: remove use of 'struct platform_device'
This is a preparation of an api changes for the emac_main.c module.
The involved functions are arc_emac_probe and arc_emac_remove.
Signed-off-by: Romain Perier <romain.perier@gmail.com>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/arc/emac_main.c')
-rw-r--r-- | drivers/net/ethernet/arc/emac_main.c | 64 |
1 files changed, 33 insertions, 31 deletions
diff --git a/drivers/net/ethernet/arc/emac_main.c b/drivers/net/ethernet/arc/emac_main.c index fe5cfeace6e3..761b936e0f0a 100644 --- a/drivers/net/ethernet/arc/emac_main.c +++ b/drivers/net/ethernet/arc/emac_main.c | |||
@@ -673,6 +673,7 @@ static const struct net_device_ops arc_emac_netdev_ops = { | |||
673 | 673 | ||
674 | static int arc_emac_probe(struct platform_device *pdev) | 674 | static int arc_emac_probe(struct platform_device *pdev) |
675 | { | 675 | { |
676 | struct device *dev = &pdev->dev; | ||
676 | struct resource res_regs; | 677 | struct resource res_regs; |
677 | struct device_node *phy_node; | 678 | struct device_node *phy_node; |
678 | struct arc_emac_priv *priv; | 679 | struct arc_emac_priv *priv; |
@@ -681,27 +682,27 @@ static int arc_emac_probe(struct platform_device *pdev) | |||
681 | unsigned int id, clock_frequency, irq; | 682 | unsigned int id, clock_frequency, irq; |
682 | int err; | 683 | int err; |
683 | 684 | ||
684 | if (!pdev->dev.of_node) | 685 | if (!dev->of_node) |
685 | return -ENODEV; | 686 | return -ENODEV; |
686 | 687 | ||
687 | /* Get PHY from device tree */ | 688 | /* Get PHY from device tree */ |
688 | phy_node = of_parse_phandle(pdev->dev.of_node, "phy", 0); | 689 | phy_node = of_parse_phandle(dev->of_node, "phy", 0); |
689 | if (!phy_node) { | 690 | if (!phy_node) { |
690 | dev_err(&pdev->dev, "failed to retrieve phy description from device tree\n"); | 691 | dev_err(dev, "failed to retrieve phy description from device tree\n"); |
691 | return -ENODEV; | 692 | return -ENODEV; |
692 | } | 693 | } |
693 | 694 | ||
694 | /* Get EMAC registers base address from device tree */ | 695 | /* Get EMAC registers base address from device tree */ |
695 | err = of_address_to_resource(pdev->dev.of_node, 0, &res_regs); | 696 | err = of_address_to_resource(dev->of_node, 0, &res_regs); |
696 | if (err) { | 697 | if (err) { |
697 | dev_err(&pdev->dev, "failed to retrieve registers base from device tree\n"); | 698 | dev_err(dev, "failed to retrieve registers base from device tree\n"); |
698 | return -ENODEV; | 699 | return -ENODEV; |
699 | } | 700 | } |
700 | 701 | ||
701 | /* Get IRQ from device tree */ | 702 | /* Get IRQ from device tree */ |
702 | irq = irq_of_parse_and_map(pdev->dev.of_node, 0); | 703 | irq = irq_of_parse_and_map(dev->of_node, 0); |
703 | if (!irq) { | 704 | if (!irq) { |
704 | dev_err(&pdev->dev, "failed to retrieve <irq> value from device tree\n"); | 705 | dev_err(dev, "failed to retrieve <irq> value from device tree\n"); |
705 | return -ENODEV; | 706 | return -ENODEV; |
706 | } | 707 | } |
707 | 708 | ||
@@ -709,8 +710,8 @@ static int arc_emac_probe(struct platform_device *pdev) | |||
709 | if (!ndev) | 710 | if (!ndev) |
710 | return -ENOMEM; | 711 | return -ENOMEM; |
711 | 712 | ||
712 | platform_set_drvdata(pdev, ndev); | 713 | dev_set_drvdata(dev, ndev); |
713 | SET_NETDEV_DEV(ndev, &pdev->dev); | 714 | SET_NETDEV_DEV(ndev, dev); |
714 | 715 | ||
715 | ndev->netdev_ops = &arc_emac_netdev_ops; | 716 | ndev->netdev_ops = &arc_emac_netdev_ops; |
716 | ndev->ethtool_ops = &arc_emac_ethtool_ops; | 717 | ndev->ethtool_ops = &arc_emac_ethtool_ops; |
@@ -719,28 +720,28 @@ static int arc_emac_probe(struct platform_device *pdev) | |||
719 | ndev->flags &= ~IFF_MULTICAST; | 720 | ndev->flags &= ~IFF_MULTICAST; |
720 | 721 | ||
721 | priv = netdev_priv(ndev); | 722 | priv = netdev_priv(ndev); |
722 | priv->dev = &pdev->dev; | 723 | priv->dev = dev; |
723 | 724 | ||
724 | priv->regs = devm_ioremap_resource(&pdev->dev, &res_regs); | 725 | priv->regs = devm_ioremap_resource(dev, &res_regs); |
725 | if (IS_ERR(priv->regs)) { | 726 | if (IS_ERR(priv->regs)) { |
726 | err = PTR_ERR(priv->regs); | 727 | err = PTR_ERR(priv->regs); |
727 | goto out_netdev; | 728 | goto out_netdev; |
728 | } | 729 | } |
729 | dev_dbg(&pdev->dev, "Registers base address is 0x%p\n", priv->regs); | 730 | dev_dbg(dev, "Registers base address is 0x%p\n", priv->regs); |
730 | 731 | ||
731 | priv->clk = of_clk_get(pdev->dev.of_node, 0); | 732 | priv->clk = of_clk_get(dev->of_node, 0); |
732 | if (IS_ERR(priv->clk)) { | 733 | if (IS_ERR(priv->clk)) { |
733 | /* Get CPU clock frequency from device tree */ | 734 | /* Get CPU clock frequency from device tree */ |
734 | if (of_property_read_u32(pdev->dev.of_node, "clock-frequency", | 735 | if (of_property_read_u32(dev->of_node, "clock-frequency", |
735 | &clock_frequency)) { | 736 | &clock_frequency)) { |
736 | dev_err(&pdev->dev, "failed to retrieve <clock-frequency> from device tree\n"); | 737 | dev_err(dev, "failed to retrieve <clock-frequency> from device tree\n"); |
737 | err = -EINVAL; | 738 | err = -EINVAL; |
738 | goto out_netdev; | 739 | goto out_netdev; |
739 | } | 740 | } |
740 | } else { | 741 | } else { |
741 | err = clk_prepare_enable(priv->clk); | 742 | err = clk_prepare_enable(priv->clk); |
742 | if (err) { | 743 | if (err) { |
743 | dev_err(&pdev->dev, "failed to enable clock\n"); | 744 | dev_err(dev, "failed to enable clock\n"); |
744 | goto out_clkget; | 745 | goto out_clkget; |
745 | } | 746 | } |
746 | 747 | ||
@@ -751,28 +752,28 @@ static int arc_emac_probe(struct platform_device *pdev) | |||
751 | 752 | ||
752 | /* Check for EMAC revision 5 or 7, magic number */ | 753 | /* Check for EMAC revision 5 or 7, magic number */ |
753 | if (!(id == 0x0005fd02 || id == 0x0007fd02)) { | 754 | if (!(id == 0x0005fd02 || id == 0x0007fd02)) { |
754 | dev_err(&pdev->dev, "ARC EMAC not detected, id=0x%x\n", id); | 755 | dev_err(dev, "ARC EMAC not detected, id=0x%x\n", id); |
755 | err = -ENODEV; | 756 | err = -ENODEV; |
756 | goto out_clken; | 757 | goto out_clken; |
757 | } | 758 | } |
758 | dev_info(&pdev->dev, "ARC EMAC detected with id: 0x%x\n", id); | 759 | dev_info(dev, "ARC EMAC detected with id: 0x%x\n", id); |
759 | 760 | ||
760 | /* Set poll rate so that it polls every 1 ms */ | 761 | /* Set poll rate so that it polls every 1 ms */ |
761 | arc_reg_set(priv, R_POLLRATE, clock_frequency / 1000000); | 762 | arc_reg_set(priv, R_POLLRATE, clock_frequency / 1000000); |
762 | 763 | ||
763 | ndev->irq = irq; | 764 | ndev->irq = irq; |
764 | dev_info(&pdev->dev, "IRQ is %d\n", ndev->irq); | 765 | dev_info(dev, "IRQ is %d\n", ndev->irq); |
765 | 766 | ||
766 | /* Register interrupt handler for device */ | 767 | /* Register interrupt handler for device */ |
767 | err = devm_request_irq(&pdev->dev, ndev->irq, arc_emac_intr, 0, | 768 | err = devm_request_irq(dev, ndev->irq, arc_emac_intr, 0, |
768 | ndev->name, ndev); | 769 | ndev->name, ndev); |
769 | if (err) { | 770 | if (err) { |
770 | dev_err(&pdev->dev, "could not allocate IRQ\n"); | 771 | dev_err(dev, "could not allocate IRQ\n"); |
771 | goto out_clken; | 772 | goto out_clken; |
772 | } | 773 | } |
773 | 774 | ||
774 | /* Get MAC address from device tree */ | 775 | /* Get MAC address from device tree */ |
775 | mac_addr = of_get_mac_address(pdev->dev.of_node); | 776 | mac_addr = of_get_mac_address(dev->of_node); |
776 | 777 | ||
777 | if (mac_addr) | 778 | if (mac_addr) |
778 | memcpy(ndev->dev_addr, mac_addr, ETH_ALEN); | 779 | memcpy(ndev->dev_addr, mac_addr, ETH_ALEN); |
@@ -780,14 +781,14 @@ static int arc_emac_probe(struct platform_device *pdev) | |||
780 | eth_hw_addr_random(ndev); | 781 | eth_hw_addr_random(ndev); |
781 | 782 | ||
782 | arc_emac_set_address_internal(ndev); | 783 | arc_emac_set_address_internal(ndev); |
783 | dev_info(&pdev->dev, "MAC address is now %pM\n", ndev->dev_addr); | 784 | dev_info(dev, "MAC address is now %pM\n", ndev->dev_addr); |
784 | 785 | ||
785 | /* Do 1 allocation instead of 2 separate ones for Rx and Tx BD rings */ | 786 | /* Do 1 allocation instead of 2 separate ones for Rx and Tx BD rings */ |
786 | priv->rxbd = dmam_alloc_coherent(&pdev->dev, RX_RING_SZ + TX_RING_SZ, | 787 | priv->rxbd = dmam_alloc_coherent(dev, RX_RING_SZ + TX_RING_SZ, |
787 | &priv->rxbd_dma, GFP_KERNEL); | 788 | &priv->rxbd_dma, GFP_KERNEL); |
788 | 789 | ||
789 | if (!priv->rxbd) { | 790 | if (!priv->rxbd) { |
790 | dev_err(&pdev->dev, "failed to allocate data buffers\n"); | 791 | dev_err(dev, "failed to allocate data buffers\n"); |
791 | err = -ENOMEM; | 792 | err = -ENOMEM; |
792 | goto out_clken; | 793 | goto out_clken; |
793 | } | 794 | } |
@@ -795,31 +796,31 @@ static int arc_emac_probe(struct platform_device *pdev) | |||
795 | priv->txbd = priv->rxbd + RX_BD_NUM; | 796 | priv->txbd = priv->rxbd + RX_BD_NUM; |
796 | 797 | ||
797 | priv->txbd_dma = priv->rxbd_dma + RX_RING_SZ; | 798 | priv->txbd_dma = priv->rxbd_dma + RX_RING_SZ; |
798 | dev_dbg(&pdev->dev, "EMAC Device addr: Rx Ring [0x%x], Tx Ring[%x]\n", | 799 | dev_dbg(dev, "EMAC Device addr: Rx Ring [0x%x], Tx Ring[%x]\n", |
799 | (unsigned int)priv->rxbd_dma, (unsigned int)priv->txbd_dma); | 800 | (unsigned int)priv->rxbd_dma, (unsigned int)priv->txbd_dma); |
800 | 801 | ||
801 | err = arc_mdio_probe(pdev, priv); | 802 | err = arc_mdio_probe(pdev, priv); |
802 | if (err) { | 803 | if (err) { |
803 | dev_err(&pdev->dev, "failed to probe MII bus\n"); | 804 | dev_err(dev, "failed to probe MII bus\n"); |
804 | goto out_clken; | 805 | goto out_clken; |
805 | } | 806 | } |
806 | 807 | ||
807 | priv->phy_dev = of_phy_connect(ndev, phy_node, arc_emac_adjust_link, 0, | 808 | priv->phy_dev = of_phy_connect(ndev, phy_node, arc_emac_adjust_link, 0, |
808 | PHY_INTERFACE_MODE_MII); | 809 | PHY_INTERFACE_MODE_MII); |
809 | if (!priv->phy_dev) { | 810 | if (!priv->phy_dev) { |
810 | dev_err(&pdev->dev, "of_phy_connect() failed\n"); | 811 | dev_err(dev, "of_phy_connect() failed\n"); |
811 | err = -ENODEV; | 812 | err = -ENODEV; |
812 | goto out_mdio; | 813 | goto out_mdio; |
813 | } | 814 | } |
814 | 815 | ||
815 | dev_info(&pdev->dev, "connected to %s phy with id 0x%x\n", | 816 | dev_info(dev, "connected to %s phy with id 0x%x\n", |
816 | priv->phy_dev->drv->name, priv->phy_dev->phy_id); | 817 | priv->phy_dev->drv->name, priv->phy_dev->phy_id); |
817 | 818 | ||
818 | netif_napi_add(ndev, &priv->napi, arc_emac_poll, ARC_EMAC_NAPI_WEIGHT); | 819 | netif_napi_add(ndev, &priv->napi, arc_emac_poll, ARC_EMAC_NAPI_WEIGHT); |
819 | 820 | ||
820 | err = register_netdev(ndev); | 821 | err = register_netdev(ndev); |
821 | if (err) { | 822 | if (err) { |
822 | dev_err(&pdev->dev, "failed to register network device\n"); | 823 | dev_err(dev, "failed to register network device\n"); |
823 | goto out_netif_api; | 824 | goto out_netif_api; |
824 | } | 825 | } |
825 | 826 | ||
@@ -844,7 +845,8 @@ out_netdev: | |||
844 | 845 | ||
845 | static int arc_emac_remove(struct platform_device *pdev) | 846 | static int arc_emac_remove(struct platform_device *pdev) |
846 | { | 847 | { |
847 | struct net_device *ndev = platform_get_drvdata(pdev); | 848 | struct device *dev = &pdev->dev; |
849 | struct net_device *ndev = dev_get_drvdata(dev); | ||
848 | struct arc_emac_priv *priv = netdev_priv(ndev); | 850 | struct arc_emac_priv *priv = netdev_priv(ndev); |
849 | 851 | ||
850 | phy_disconnect(priv->phy_dev); | 852 | phy_disconnect(priv->phy_dev); |