aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/arc/emac_main.c
diff options
context:
space:
mode:
authorRomain Perier <romain.perier@gmail.com>2014-08-26 09:14:49 -0400
committerDavid S. Miller <davem@davemloft.net>2014-08-27 19:40:25 -0400
commitf15f44e0839793ea03ffef5bae532cd63d92948c (patch)
treeb16949d8e4e8e6a44cf5295053c9ff070a565678 /drivers/net/ethernet/arc/emac_main.c
parent253ff51635ad6690276ef065d59523c4bd1cd584 (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.c64
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
674static int arc_emac_probe(struct platform_device *pdev) 674static 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
845static int arc_emac_remove(struct platform_device *pdev) 846static 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);