1212#include <linux/compiler.h>
1313#include <linux/delay.h>
1414#include <linux/err.h>
15- #include <linux/gpio.h>
1615#include <linux/gpio/consumer.h>
1716#include <linux/interrupt.h>
1817#include <linux/mfd/syscon.h>
1918#include <linux/of.h>
20- #include <linux/of_gpio.h>
2119#include <linux/of_pci.h>
2220#include <linux/phy/phy.h>
2321#include <linux/pci.h>
@@ -78,16 +76,16 @@ struct kirin_pcie {
7876 void * phy_priv ; /* only for PCIE_KIRIN_INTERNAL_PHY */
7977
8078 /* DWC PERST# */
81- int gpio_id_dwc_perst ;
79+ struct gpio_desc * id_dwc_perst_gpio ;
8280
8381 /* Per-slot PERST# */
8482 int num_slots ;
85- int gpio_id_reset [MAX_PCI_SLOTS ];
83+ struct gpio_desc * id_reset_gpio [MAX_PCI_SLOTS ];
8684 const char * reset_names [MAX_PCI_SLOTS ];
8785
8886 /* Per-slot clkreq */
8987 int n_gpio_clkreq ;
90- int gpio_id_clkreq [MAX_PCI_SLOTS ];
88+ struct gpio_desc * id_clkreq_gpio [MAX_PCI_SLOTS ];
9189 const char * clkreq_names [MAX_PCI_SLOTS ];
9290};
9391
@@ -381,15 +379,20 @@ static int kirin_pcie_get_gpio_enable(struct kirin_pcie *pcie,
381379 pcie -> n_gpio_clkreq = ret ;
382380
383381 for (i = 0 ; i < pcie -> n_gpio_clkreq ; i ++ ) {
384- pcie -> gpio_id_clkreq [i ] = of_get_named_gpio (dev -> of_node ,
385- "hisilicon,clken-gpios" , i );
386- if (pcie -> gpio_id_clkreq [i ] < 0 )
387- return pcie -> gpio_id_clkreq [i ];
382+ pcie -> id_clkreq_gpio [i ] = devm_gpiod_get_index (dev ,
383+ "hisilicon,clken" , i ,
384+ GPIOD_OUT_LOW );
385+ if (IS_ERR (pcie -> id_clkreq_gpio [i ]))
386+ return dev_err_probe (dev , PTR_ERR (pcie -> id_clkreq_gpio [i ]),
387+ "unable to get a valid clken gpio\n" );
388388
389389 pcie -> clkreq_names [i ] = devm_kasprintf (dev , GFP_KERNEL ,
390390 "pcie_clkreq_%d" , i );
391391 if (!pcie -> clkreq_names [i ])
392392 return - ENOMEM ;
393+
394+ gpiod_set_consumer_name (pcie -> id_clkreq_gpio [i ],
395+ pcie -> clkreq_names [i ]);
393396 }
394397
395398 return 0 ;
@@ -400,49 +403,49 @@ static int kirin_pcie_parse_port(struct kirin_pcie *pcie,
400403 struct device_node * node )
401404{
402405 struct device * dev = & pdev -> dev ;
403- struct device_node * parent , * child ;
404406 int ret , slot , i ;
405407
406- for_each_available_child_of_node (node , parent ) {
407- for_each_available_child_of_node (parent , child ) {
408+ for_each_available_child_of_node_scoped (node , parent ) {
409+ for_each_available_child_of_node_scoped (parent , child ) {
408410 i = pcie -> num_slots ;
409411
410- pcie -> gpio_id_reset [i ] = of_get_named_gpio (child ,
411- "reset-gpios" , 0 );
412- if (pcie -> gpio_id_reset [i ] < 0 )
413- continue ;
412+ pcie -> id_reset_gpio [i ] = devm_fwnode_gpiod_get_index (dev ,
413+ of_fwnode_handle (child ),
414+ "reset" , 0 , GPIOD_OUT_LOW ,
415+ NULL );
416+ if (IS_ERR (pcie -> id_reset_gpio [i ])) {
417+ if (PTR_ERR (pcie -> id_reset_gpio [i ]) == - ENOENT )
418+ continue ;
419+ return dev_err_probe (dev , PTR_ERR (pcie -> id_reset_gpio [i ]),
420+ "unable to get a valid reset gpio\n" );
421+ }
414422
415423 pcie -> num_slots ++ ;
416424 if (pcie -> num_slots > MAX_PCI_SLOTS ) {
417425 dev_err (dev , "Too many PCI slots!\n" );
418- ret = - EINVAL ;
419- goto put_node ;
426+ return - EINVAL ;
420427 }
421428
422429 ret = of_pci_get_devfn (child );
423430 if (ret < 0 ) {
424431 dev_err (dev , "failed to parse devfn: %d\n" , ret );
425- goto put_node ;
432+ return ret ;
426433 }
427434
428435 slot = PCI_SLOT (ret );
429436
430437 pcie -> reset_names [i ] = devm_kasprintf (dev , GFP_KERNEL ,
431438 "pcie_perst_%d" ,
432439 slot );
433- if (!pcie -> reset_names [i ]) {
434- ret = - ENOMEM ;
435- goto put_node ;
436- }
440+ if (!pcie -> reset_names [i ])
441+ return - ENOMEM ;
442+
443+ gpiod_set_consumer_name (pcie -> id_reset_gpio [i ],
444+ pcie -> reset_names [i ]);
437445 }
438446 }
439447
440448 return 0 ;
441-
442- put_node :
443- of_node_put (child );
444- of_node_put (parent );
445- return ret ;
446449}
447450
448451static long kirin_pcie_get_resource (struct kirin_pcie * kirin_pcie ,
@@ -463,14 +466,11 @@ static long kirin_pcie_get_resource(struct kirin_pcie *kirin_pcie,
463466 return PTR_ERR (kirin_pcie -> apb );
464467
465468 /* pcie internal PERST# gpio */
466- kirin_pcie -> gpio_id_dwc_perst = of_get_named_gpio (dev -> of_node ,
467- "reset-gpios" , 0 );
468- if (kirin_pcie -> gpio_id_dwc_perst == - EPROBE_DEFER ) {
469- return - EPROBE_DEFER ;
470- } else if (!gpio_is_valid (kirin_pcie -> gpio_id_dwc_perst )) {
471- dev_err (dev , "unable to get a valid gpio pin\n" );
472- return - ENODEV ;
473- }
469+ kirin_pcie -> id_dwc_perst_gpio = devm_gpiod_get (dev , "reset" , GPIOD_OUT_LOW );
470+ if (IS_ERR (kirin_pcie -> id_dwc_perst_gpio ))
471+ return dev_err_probe (dev , PTR_ERR (kirin_pcie -> id_dwc_perst_gpio ),
472+ "unable to get a valid gpio pin\n" );
473+ gpiod_set_consumer_name (kirin_pcie -> id_dwc_perst_gpio , "pcie_perst_bridge" );
474474
475475 ret = kirin_pcie_get_gpio_enable (kirin_pcie , pdev );
476476 if (ret )
@@ -553,7 +553,7 @@ static int kirin_pcie_add_bus(struct pci_bus *bus)
553553
554554 /* Send PERST# to each slot */
555555 for (i = 0 ; i < kirin_pcie -> num_slots ; i ++ ) {
556- ret = gpio_direction_output (kirin_pcie -> gpio_id_reset [i ], 1 );
556+ ret = gpiod_direction_output_raw (kirin_pcie -> id_reset_gpio [i ], 1 );
557557 if (ret ) {
558558 dev_err (pci -> dev , "PERST# %s error: %d\n" ,
559559 kirin_pcie -> reset_names [i ], ret );
@@ -623,44 +623,6 @@ static int kirin_pcie_host_init(struct dw_pcie_rp *pp)
623623 return 0 ;
624624}
625625
626- static int kirin_pcie_gpio_request (struct kirin_pcie * kirin_pcie ,
627- struct device * dev )
628- {
629- int ret , i ;
630-
631- for (i = 0 ; i < kirin_pcie -> num_slots ; i ++ ) {
632- if (!gpio_is_valid (kirin_pcie -> gpio_id_reset [i ])) {
633- dev_err (dev , "unable to get a valid %s gpio\n" ,
634- kirin_pcie -> reset_names [i ]);
635- return - ENODEV ;
636- }
637-
638- ret = devm_gpio_request (dev , kirin_pcie -> gpio_id_reset [i ],
639- kirin_pcie -> reset_names [i ]);
640- if (ret )
641- return ret ;
642- }
643-
644- for (i = 0 ; i < kirin_pcie -> n_gpio_clkreq ; i ++ ) {
645- if (!gpio_is_valid (kirin_pcie -> gpio_id_clkreq [i ])) {
646- dev_err (dev , "unable to get a valid %s gpio\n" ,
647- kirin_pcie -> clkreq_names [i ]);
648- return - ENODEV ;
649- }
650-
651- ret = devm_gpio_request (dev , kirin_pcie -> gpio_id_clkreq [i ],
652- kirin_pcie -> clkreq_names [i ]);
653- if (ret )
654- return ret ;
655-
656- ret = gpio_direction_output (kirin_pcie -> gpio_id_clkreq [i ], 0 );
657- if (ret )
658- return ret ;
659- }
660-
661- return 0 ;
662- }
663-
664626static const struct dw_pcie_ops kirin_dw_pcie_ops = {
665627 .read_dbi = kirin_pcie_read_dbi ,
666628 .write_dbi = kirin_pcie_write_dbi ,
@@ -680,7 +642,7 @@ static int kirin_pcie_power_off(struct kirin_pcie *kirin_pcie)
680642 return hi3660_pcie_phy_power_off (kirin_pcie );
681643
682644 for (i = 0 ; i < kirin_pcie -> n_gpio_clkreq ; i ++ )
683- gpio_direction_output (kirin_pcie -> gpio_id_clkreq [i ], 1 );
645+ gpiod_direction_output_raw (kirin_pcie -> id_clkreq_gpio [i ], 1 );
684646
685647 phy_power_off (kirin_pcie -> phy );
686648 phy_exit (kirin_pcie -> phy );
@@ -707,10 +669,6 @@ static int kirin_pcie_power_on(struct platform_device *pdev,
707669 if (IS_ERR (kirin_pcie -> phy ))
708670 return PTR_ERR (kirin_pcie -> phy );
709671
710- ret = kirin_pcie_gpio_request (kirin_pcie , dev );
711- if (ret )
712- return ret ;
713-
714672 ret = phy_init (kirin_pcie -> phy );
715673 if (ret )
716674 goto err ;
@@ -723,11 +681,9 @@ static int kirin_pcie_power_on(struct platform_device *pdev,
723681 /* perst assert Endpoint */
724682 usleep_range (REF_2_PERST_MIN , REF_2_PERST_MAX );
725683
726- if (!gpio_request (kirin_pcie -> gpio_id_dwc_perst , "pcie_perst_bridge" )) {
727- ret = gpio_direction_output (kirin_pcie -> gpio_id_dwc_perst , 1 );
728- if (ret )
729- goto err ;
730- }
684+ ret = gpiod_direction_output_raw (kirin_pcie -> id_dwc_perst_gpio , 1 );
685+ if (ret )
686+ goto err ;
731687
732688 usleep_range (PERST_2_ACCESS_MIN , PERST_2_ACCESS_MAX );
733689
0 commit comments