1818#include <linux/of.h>
1919#include <linux/pinctrl/consumer.h>
2020#include <linux/platform_device.h>
21- #include <linux/platform_data/gpio-davinci.h>
2221#include <linux/property.h>
2322#include <linux/irqchip/chained_irq.h>
2423#include <linux/spinlock.h>
@@ -154,74 +153,37 @@ davinci_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
154153 value ? & g -> set_data : & g -> clr_data );
155154}
156155
157- static struct davinci_gpio_platform_data *
158- davinci_gpio_get_pdata (struct platform_device * pdev )
159- {
160- struct device_node * dn = pdev -> dev .of_node ;
161- struct davinci_gpio_platform_data * pdata ;
162- int ret ;
163- u32 val ;
164-
165- if (!IS_ENABLED (CONFIG_OF ) || !pdev -> dev .of_node )
166- return dev_get_platdata (& pdev -> dev );
167-
168- pdata = devm_kzalloc (& pdev -> dev , sizeof (* pdata ), GFP_KERNEL );
169- if (!pdata )
170- return NULL ;
171-
172- ret = of_property_read_u32 (dn , "ti,ngpio" , & val );
173- if (ret )
174- goto of_err ;
175-
176- pdata -> ngpio = val ;
177-
178- ret = of_property_read_u32 (dn , "ti,davinci-gpio-unbanked" , & val );
179- if (ret )
180- goto of_err ;
181-
182- pdata -> gpio_unbanked = val ;
183-
184- return pdata ;
185-
186- of_err :
187- dev_err (& pdev -> dev , "Populating pdata from DT failed: err %d\n" , ret );
188- return NULL ;
189- }
190-
191156static int davinci_gpio_probe (struct platform_device * pdev )
192157{
193158 int bank , i , ret = 0 ;
194- unsigned int ngpio , nbank , nirq ;
159+ unsigned int ngpio , nbank , nirq , gpio_unbanked ;
195160 struct davinci_gpio_controller * chips ;
196- struct davinci_gpio_platform_data * pdata ;
197161 struct device * dev = & pdev -> dev ;
198-
199- pdata = davinci_gpio_get_pdata (pdev );
200- if (!pdata ) {
201- dev_err (dev , "No platform data found\n" );
202- return - EINVAL ;
203- }
204-
205- dev -> platform_data = pdata ;
162+ struct device_node * dn = dev_of_node (dev );
206163
207164 /*
208165 * The gpio banks conceptually expose a segmented bitmap,
209166 * and "ngpio" is one more than the largest zero-based
210167 * bit index that's valid.
211168 */
212- ngpio = pdata -> ngpio ;
213- if (ngpio == 0 ) {
214- dev_err (dev , "How many GPIOs? \n" );
215- return - EINVAL ;
216- }
169+ ret = of_property_read_u32 ( dn , "ti, ngpio" , & ngpio ) ;
170+ if (ret )
171+ return dev_err_probe (dev , ret , "Failed to get the number of GPIOs\n" );
172+ if ( ngpio == 0 )
173+ return dev_err_probe ( dev , - EINVAL , "How many GPIOs?\n" );
217174
218175 /*
219176 * If there are unbanked interrupts then the number of
220177 * interrupts is equal to number of gpios else all are banked so
221178 * number of interrupts is equal to number of banks(each with 16 gpios)
222179 */
223- if (pdata -> gpio_unbanked )
224- nirq = pdata -> gpio_unbanked ;
180+ ret = of_property_read_u32 (dn , "ti,davinci-gpio-unbanked" ,
181+ & gpio_unbanked );
182+ if (ret )
183+ return dev_err_probe (dev , ret , "Failed to get the unbanked GPIOs property\n" );
184+
185+ if (gpio_unbanked )
186+ nirq = gpio_unbanked ;
225187 else
226188 nirq = DIV_ROUND_UP (ngpio , 16 );
227189
@@ -252,7 +214,7 @@ static int davinci_gpio_probe(struct platform_device *pdev)
252214 chips -> chip .set = davinci_gpio_set ;
253215
254216 chips -> chip .ngpio = ngpio ;
255- chips -> chip .base = pdata -> no_auto_base ? pdata -> base : -1 ;
217+ chips -> chip .base = -1 ;
256218
257219#ifdef CONFIG_OF_GPIO
258220 chips -> chip .parent = dev ;
@@ -261,6 +223,8 @@ static int davinci_gpio_probe(struct platform_device *pdev)
261223#endif
262224 spin_lock_init (& chips -> lock );
263225
226+ chips -> gpio_unbanked = gpio_unbanked ;
227+
264228 nbank = DIV_ROUND_UP (ngpio , 32 );
265229 for (bank = 0 ; bank < nbank ; bank ++ )
266230 chips -> regs [bank ] = gpio_base + offset_array [bank ];
@@ -488,7 +452,6 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev)
488452 unsigned ngpio ;
489453 struct device * dev = & pdev -> dev ;
490454 struct davinci_gpio_controller * chips = platform_get_drvdata (pdev );
491- struct davinci_gpio_platform_data * pdata = dev -> platform_data ;
492455 struct davinci_gpio_regs __iomem * g ;
493456 struct irq_domain * irq_domain = NULL ;
494457 struct irq_chip * irq_chip ;
@@ -502,7 +465,7 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev)
502465 if (dev -> of_node )
503466 gpio_get_irq_chip = (gpio_get_irq_chip_cb_t )device_get_match_data (dev );
504467
505- ngpio = pdata -> ngpio ;
468+ ngpio = chips -> chip . ngpio ;
506469
507470 clk = devm_clk_get (dev , "gpio" );
508471 if (IS_ERR (clk )) {
@@ -514,7 +477,7 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev)
514477 if (ret )
515478 return ret ;
516479
517- if (! pdata -> gpio_unbanked ) {
480+ if (chips -> gpio_unbanked ) {
518481 irq = devm_irq_alloc_descs (dev , -1 , 0 , ngpio , 0 );
519482 if (irq < 0 ) {
520483 dev_err (dev , "Couldn't allocate IRQ numbers\n" );
@@ -546,11 +509,11 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev)
546509 * controller only handling trigger modes. We currently assume no
547510 * IRQ mux conflicts; gpio_irq_type_unbanked() is only for GPIOs.
548511 */
549- if (pdata -> gpio_unbanked ) {
512+ if (chips -> gpio_unbanked ) {
550513 /* pass "bank 0" GPIO IRQs to AINTC */
551514 chips -> chip .to_irq = gpio_to_irq_unbanked ;
552- chips -> gpio_unbanked = pdata -> gpio_unbanked ;
553- binten = GENMASK (pdata -> gpio_unbanked / 16 , 0 );
515+
516+ binten = GENMASK (chips -> gpio_unbanked / 16 , 0 );
554517
555518 /* AINTC handles mask/unmask; GPIO handles triggering */
556519 irq = chips -> irqs [0 ];
@@ -564,7 +527,7 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev)
564527 writel_relaxed (~0 , & g -> set_rising );
565528
566529 /* set the direct IRQs up to use that irqchip */
567- for (gpio = 0 ; gpio < pdata -> gpio_unbanked ; gpio ++ ) {
530+ for (gpio = 0 ; gpio < chips -> gpio_unbanked ; gpio ++ ) {
568531 irq_set_chip (chips -> irqs [gpio ], irq_chip );
569532 irq_set_handler_data (chips -> irqs [gpio ], chips );
570533 irq_set_status_flags (chips -> irqs [gpio ],
@@ -675,8 +638,7 @@ static void davinci_gpio_restore_context(struct davinci_gpio_controller *chips,
675638static int davinci_gpio_suspend (struct device * dev )
676639{
677640 struct davinci_gpio_controller * chips = dev_get_drvdata (dev );
678- struct davinci_gpio_platform_data * pdata = dev_get_platdata (dev );
679- u32 nbank = DIV_ROUND_UP (pdata -> ngpio , 32 );
641+ u32 nbank = DIV_ROUND_UP (chips -> chip .ngpio , 32 );
680642
681643 davinci_gpio_save_context (chips , nbank );
682644
@@ -686,8 +648,7 @@ static int davinci_gpio_suspend(struct device *dev)
686648static int davinci_gpio_resume (struct device * dev )
687649{
688650 struct davinci_gpio_controller * chips = dev_get_drvdata (dev );
689- struct davinci_gpio_platform_data * pdata = dev_get_platdata (dev );
690- u32 nbank = DIV_ROUND_UP (pdata -> ngpio , 32 );
651+ u32 nbank = DIV_ROUND_UP (chips -> chip .ngpio , 32 );
691652
692653 davinci_gpio_restore_context (chips , nbank );
693654
0 commit comments