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 ;
@@ -406,10 +409,16 @@ static int kirin_pcie_parse_port(struct kirin_pcie *pcie,
406409 for_each_available_child_of_node_scoped (parent , child ) {
407410 i = pcie -> num_slots ;
408411
409- pcie -> gpio_id_reset [i ] = of_get_named_gpio (child ,
410- "reset-gpios" , 0 );
411- if (pcie -> gpio_id_reset [i ] < 0 )
412- 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+ }
413422
414423 pcie -> num_slots ++ ;
415424 if (pcie -> num_slots > MAX_PCI_SLOTS ) {
@@ -430,6 +439,9 @@ static int kirin_pcie_parse_port(struct kirin_pcie *pcie,
430439 slot );
431440 if (!pcie -> reset_names [i ])
432441 return - ENOMEM ;
442+
443+ gpiod_set_consumer_name (pcie -> id_reset_gpio [i ],
444+ pcie -> reset_names [i ]);
433445 }
434446 }
435447
@@ -454,14 +466,11 @@ static long kirin_pcie_get_resource(struct kirin_pcie *kirin_pcie,
454466 return PTR_ERR (kirin_pcie -> apb );
455467
456468 /* pcie internal PERST# gpio */
457- kirin_pcie -> gpio_id_dwc_perst = of_get_named_gpio (dev -> of_node ,
458- "reset-gpios" , 0 );
459- if (kirin_pcie -> gpio_id_dwc_perst == - EPROBE_DEFER ) {
460- return - EPROBE_DEFER ;
461- } else if (!gpio_is_valid (kirin_pcie -> gpio_id_dwc_perst )) {
462- dev_err (dev , "unable to get a valid gpio pin\n" );
463- return - ENODEV ;
464- }
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" );
465474
466475 ret = kirin_pcie_get_gpio_enable (kirin_pcie , pdev );
467476 if (ret )
@@ -544,7 +553,7 @@ static int kirin_pcie_add_bus(struct pci_bus *bus)
544553
545554 /* Send PERST# to each slot */
546555 for (i = 0 ; i < kirin_pcie -> num_slots ; i ++ ) {
547- ret = gpio_direction_output (kirin_pcie -> gpio_id_reset [i ], 1 );
556+ ret = gpiod_direction_output_raw (kirin_pcie -> id_reset_gpio [i ], 1 );
548557 if (ret ) {
549558 dev_err (pci -> dev , "PERST# %s error: %d\n" ,
550559 kirin_pcie -> reset_names [i ], ret );
@@ -614,44 +623,6 @@ static int kirin_pcie_host_init(struct dw_pcie_rp *pp)
614623 return 0 ;
615624}
616625
617- static int kirin_pcie_gpio_request (struct kirin_pcie * kirin_pcie ,
618- struct device * dev )
619- {
620- int ret , i ;
621-
622- for (i = 0 ; i < kirin_pcie -> num_slots ; i ++ ) {
623- if (!gpio_is_valid (kirin_pcie -> gpio_id_reset [i ])) {
624- dev_err (dev , "unable to get a valid %s gpio\n" ,
625- kirin_pcie -> reset_names [i ]);
626- return - ENODEV ;
627- }
628-
629- ret = devm_gpio_request (dev , kirin_pcie -> gpio_id_reset [i ],
630- kirin_pcie -> reset_names [i ]);
631- if (ret )
632- return ret ;
633- }
634-
635- for (i = 0 ; i < kirin_pcie -> n_gpio_clkreq ; i ++ ) {
636- if (!gpio_is_valid (kirin_pcie -> gpio_id_clkreq [i ])) {
637- dev_err (dev , "unable to get a valid %s gpio\n" ,
638- kirin_pcie -> clkreq_names [i ]);
639- return - ENODEV ;
640- }
641-
642- ret = devm_gpio_request (dev , kirin_pcie -> gpio_id_clkreq [i ],
643- kirin_pcie -> clkreq_names [i ]);
644- if (ret )
645- return ret ;
646-
647- ret = gpio_direction_output (kirin_pcie -> gpio_id_clkreq [i ], 0 );
648- if (ret )
649- return ret ;
650- }
651-
652- return 0 ;
653- }
654-
655626static const struct dw_pcie_ops kirin_dw_pcie_ops = {
656627 .read_dbi = kirin_pcie_read_dbi ,
657628 .write_dbi = kirin_pcie_write_dbi ,
@@ -671,7 +642,7 @@ static int kirin_pcie_power_off(struct kirin_pcie *kirin_pcie)
671642 return hi3660_pcie_phy_power_off (kirin_pcie );
672643
673644 for (i = 0 ; i < kirin_pcie -> n_gpio_clkreq ; i ++ )
674- gpio_direction_output (kirin_pcie -> gpio_id_clkreq [i ], 1 );
645+ gpiod_direction_output_raw (kirin_pcie -> id_clkreq_gpio [i ], 1 );
675646
676647 phy_power_off (kirin_pcie -> phy );
677648 phy_exit (kirin_pcie -> phy );
@@ -698,10 +669,6 @@ static int kirin_pcie_power_on(struct platform_device *pdev,
698669 if (IS_ERR (kirin_pcie -> phy ))
699670 return PTR_ERR (kirin_pcie -> phy );
700671
701- ret = kirin_pcie_gpio_request (kirin_pcie , dev );
702- if (ret )
703- return ret ;
704-
705672 ret = phy_init (kirin_pcie -> phy );
706673 if (ret )
707674 goto err ;
@@ -714,11 +681,9 @@ static int kirin_pcie_power_on(struct platform_device *pdev,
714681 /* perst assert Endpoint */
715682 usleep_range (REF_2_PERST_MIN , REF_2_PERST_MAX );
716683
717- if (!gpio_request (kirin_pcie -> gpio_id_dwc_perst , "pcie_perst_bridge" )) {
718- ret = gpio_direction_output (kirin_pcie -> gpio_id_dwc_perst , 1 );
719- if (ret )
720- goto err ;
721- }
684+ ret = gpiod_direction_output_raw (kirin_pcie -> id_dwc_perst_gpio , 1 );
685+ if (ret )
686+ goto err ;
722687
723688 usleep_range (PERST_2_ACCESS_MIN , PERST_2_ACCESS_MAX );
724689
0 commit comments