4545#include <sysdev/fsl_soc.h>
4646
4747#ifdef CONFIG_8xx_GPIO
48- #include <linux/gpio/legacy-of-mm-gpiochip .h>
48+ #include <linux/gpio/driver .h>
4949#endif
5050
5151#define CPM_MAP_SIZE (0x4000)
@@ -376,7 +376,8 @@ int __init cpm1_clk_setup(enum cpm_clk_target target, int clock, int mode)
376376#ifdef CONFIG_8xx_GPIO
377377
378378struct cpm1_gpio16_chip {
379- struct of_mm_gpio_chip mm_gc ;
379+ struct gpio_chip gc ;
380+ void __iomem * regs ;
380381 spinlock_t lock ;
381382
382383 /* shadowed data register to clear/set bits safely */
@@ -386,31 +387,27 @@ struct cpm1_gpio16_chip {
386387 int irq [16 ];
387388};
388389
389- static void cpm1_gpio16_save_regs (struct of_mm_gpio_chip * mm_gc )
390+ static void cpm1_gpio16_save_regs (struct cpm1_gpio16_chip * cpm1_gc )
390391{
391- struct cpm1_gpio16_chip * cpm1_gc =
392- container_of (mm_gc , struct cpm1_gpio16_chip , mm_gc );
393- struct cpm_ioport16 __iomem * iop = mm_gc -> regs ;
392+ struct cpm_ioport16 __iomem * iop = cpm1_gc -> regs ;
394393
395394 cpm1_gc -> cpdata = in_be16 (& iop -> dat );
396395}
397396
398397static int cpm1_gpio16_get (struct gpio_chip * gc , unsigned int gpio )
399398{
400- struct of_mm_gpio_chip * mm_gc = to_of_mm_gpio_chip (gc );
401- struct cpm_ioport16 __iomem * iop = mm_gc -> regs ;
399+ struct cpm1_gpio16_chip * cpm1_gc = gpiochip_get_data (gc );
400+ struct cpm_ioport16 __iomem * iop = cpm1_gc -> regs ;
402401 u16 pin_mask ;
403402
404403 pin_mask = 1 << (15 - gpio );
405404
406405 return !!(in_be16 (& iop -> dat ) & pin_mask );
407406}
408407
409- static void __cpm1_gpio16_set (struct of_mm_gpio_chip * mm_gc , u16 pin_mask ,
410- int value )
408+ static void __cpm1_gpio16_set (struct cpm1_gpio16_chip * cpm1_gc , u16 pin_mask , int value )
411409{
412- struct cpm1_gpio16_chip * cpm1_gc = gpiochip_get_data (& mm_gc -> gc );
413- struct cpm_ioport16 __iomem * iop = mm_gc -> regs ;
410+ struct cpm_ioport16 __iomem * iop = cpm1_gc -> regs ;
414411
415412 if (value )
416413 cpm1_gc -> cpdata |= pin_mask ;
@@ -422,38 +419,35 @@ static void __cpm1_gpio16_set(struct of_mm_gpio_chip *mm_gc, u16 pin_mask,
422419
423420static void cpm1_gpio16_set (struct gpio_chip * gc , unsigned int gpio , int value )
424421{
425- struct of_mm_gpio_chip * mm_gc = to_of_mm_gpio_chip (gc );
426- struct cpm1_gpio16_chip * cpm1_gc = gpiochip_get_data (& mm_gc -> gc );
422+ struct cpm1_gpio16_chip * cpm1_gc = gpiochip_get_data (gc );
427423 unsigned long flags ;
428424 u16 pin_mask = 1 << (15 - gpio );
429425
430426 spin_lock_irqsave (& cpm1_gc -> lock , flags );
431427
432- __cpm1_gpio16_set (mm_gc , pin_mask , value );
428+ __cpm1_gpio16_set (cpm1_gc , pin_mask , value );
433429
434430 spin_unlock_irqrestore (& cpm1_gc -> lock , flags );
435431}
436432
437433static int cpm1_gpio16_to_irq (struct gpio_chip * gc , unsigned int gpio )
438434{
439- struct of_mm_gpio_chip * mm_gc = to_of_mm_gpio_chip (gc );
440- struct cpm1_gpio16_chip * cpm1_gc = gpiochip_get_data (& mm_gc -> gc );
435+ struct cpm1_gpio16_chip * cpm1_gc = gpiochip_get_data (gc );
441436
442437 return cpm1_gc -> irq [gpio ] ? : - ENXIO ;
443438}
444439
445440static int cpm1_gpio16_dir_out (struct gpio_chip * gc , unsigned int gpio , int val )
446441{
447- struct of_mm_gpio_chip * mm_gc = to_of_mm_gpio_chip (gc );
448- struct cpm1_gpio16_chip * cpm1_gc = gpiochip_get_data (& mm_gc -> gc );
449- struct cpm_ioport16 __iomem * iop = mm_gc -> regs ;
442+ struct cpm1_gpio16_chip * cpm1_gc = gpiochip_get_data (gc );
443+ struct cpm_ioport16 __iomem * iop = cpm1_gc -> regs ;
450444 unsigned long flags ;
451445 u16 pin_mask = 1 << (15 - gpio );
452446
453447 spin_lock_irqsave (& cpm1_gc -> lock , flags );
454448
455449 setbits16 (& iop -> dir , pin_mask );
456- __cpm1_gpio16_set (mm_gc , pin_mask , val );
450+ __cpm1_gpio16_set (cpm1_gc , pin_mask , val );
457451
458452 spin_unlock_irqrestore (& cpm1_gc -> lock , flags );
459453
@@ -462,9 +456,8 @@ static int cpm1_gpio16_dir_out(struct gpio_chip *gc, unsigned int gpio, int val)
462456
463457static int cpm1_gpio16_dir_in (struct gpio_chip * gc , unsigned int gpio )
464458{
465- struct of_mm_gpio_chip * mm_gc = to_of_mm_gpio_chip (gc );
466- struct cpm1_gpio16_chip * cpm1_gc = gpiochip_get_data (& mm_gc -> gc );
467- struct cpm_ioport16 __iomem * iop = mm_gc -> regs ;
459+ struct cpm1_gpio16_chip * cpm1_gc = gpiochip_get_data (gc );
460+ struct cpm_ioport16 __iomem * iop = cpm1_gc -> regs ;
468461 unsigned long flags ;
469462 u16 pin_mask = 1 << (15 - gpio );
470463
@@ -481,11 +474,10 @@ int cpm1_gpiochip_add16(struct device *dev)
481474{
482475 struct device_node * np = dev -> of_node ;
483476 struct cpm1_gpio16_chip * cpm1_gc ;
484- struct of_mm_gpio_chip * mm_gc ;
485477 struct gpio_chip * gc ;
486478 u16 mask ;
487479
488- cpm1_gc = kzalloc ( sizeof (* cpm1_gc ), GFP_KERNEL );
480+ cpm1_gc = devm_kzalloc ( dev , sizeof (* cpm1_gc ), GFP_KERNEL );
489481 if (!cpm1_gc )
490482 return - ENOMEM ;
491483
@@ -499,10 +491,8 @@ int cpm1_gpiochip_add16(struct device *dev)
499491 cpm1_gc -> irq [i ] = irq_of_parse_and_map (np , j ++ );
500492 }
501493
502- mm_gc = & cpm1_gc -> mm_gc ;
503- gc = & mm_gc -> gc ;
504-
505- mm_gc -> save_regs = cpm1_gpio16_save_regs ;
494+ gc = & cpm1_gc -> gc ;
495+ gc -> base = -1 ;
506496 gc -> ngpio = 16 ;
507497 gc -> direction_input = cpm1_gpio16_dir_in ;
508498 gc -> direction_output = cpm1_gpio16_dir_out ;
@@ -512,42 +502,49 @@ int cpm1_gpiochip_add16(struct device *dev)
512502 gc -> parent = dev ;
513503 gc -> owner = THIS_MODULE ;
514504
515- return of_mm_gpiochip_add_data (np , mm_gc , cpm1_gc );
505+ gc -> label = devm_kasprintf (dev , GFP_KERNEL , "%pOF" , np );
506+ if (!gc -> label )
507+ return - ENOMEM ;
508+
509+ cpm1_gc -> regs = devm_of_iomap (dev , np , 0 , NULL );
510+ if (IS_ERR (cpm1_gc -> regs ))
511+ return PTR_ERR (cpm1_gc -> regs );
512+
513+ cpm1_gpio16_save_regs (cpm1_gc );
514+
515+ return devm_gpiochip_add_data (dev , gc , cpm1_gc );
516516}
517517
518518struct cpm1_gpio32_chip {
519- struct of_mm_gpio_chip mm_gc ;
519+ struct gpio_chip gc ;
520+ void __iomem * regs ;
520521 spinlock_t lock ;
521522
522523 /* shadowed data register to clear/set bits safely */
523524 u32 cpdata ;
524525};
525526
526- static void cpm1_gpio32_save_regs (struct of_mm_gpio_chip * mm_gc )
527+ static void cpm1_gpio32_save_regs (struct cpm1_gpio32_chip * cpm1_gc )
527528{
528- struct cpm1_gpio32_chip * cpm1_gc =
529- container_of (mm_gc , struct cpm1_gpio32_chip , mm_gc );
530- struct cpm_ioport32b __iomem * iop = mm_gc -> regs ;
529+ struct cpm_ioport32b __iomem * iop = cpm1_gc -> regs ;
531530
532531 cpm1_gc -> cpdata = in_be32 (& iop -> dat );
533532}
534533
535534static int cpm1_gpio32_get (struct gpio_chip * gc , unsigned int gpio )
536535{
537- struct of_mm_gpio_chip * mm_gc = to_of_mm_gpio_chip (gc );
538- struct cpm_ioport32b __iomem * iop = mm_gc -> regs ;
536+ struct cpm1_gpio32_chip * cpm1_gc = gpiochip_get_data (gc );
537+ struct cpm_ioport32b __iomem * iop = cpm1_gc -> regs ;
539538 u32 pin_mask ;
540539
541540 pin_mask = 1 << (31 - gpio );
542541
543542 return !!(in_be32 (& iop -> dat ) & pin_mask );
544543}
545544
546- static void __cpm1_gpio32_set (struct of_mm_gpio_chip * mm_gc , u32 pin_mask ,
547- int value )
545+ static void __cpm1_gpio32_set (struct cpm1_gpio32_chip * cpm1_gc , u32 pin_mask , int value )
548546{
549- struct cpm1_gpio32_chip * cpm1_gc = gpiochip_get_data (& mm_gc -> gc );
550- struct cpm_ioport32b __iomem * iop = mm_gc -> regs ;
547+ struct cpm_ioport32b __iomem * iop = cpm1_gc -> regs ;
551548
552549 if (value )
553550 cpm1_gc -> cpdata |= pin_mask ;
@@ -559,30 +556,28 @@ static void __cpm1_gpio32_set(struct of_mm_gpio_chip *mm_gc, u32 pin_mask,
559556
560557static void cpm1_gpio32_set (struct gpio_chip * gc , unsigned int gpio , int value )
561558{
562- struct of_mm_gpio_chip * mm_gc = to_of_mm_gpio_chip (gc );
563- struct cpm1_gpio32_chip * cpm1_gc = gpiochip_get_data (& mm_gc -> gc );
559+ struct cpm1_gpio32_chip * cpm1_gc = gpiochip_get_data (gc );
564560 unsigned long flags ;
565561 u32 pin_mask = 1 << (31 - gpio );
566562
567563 spin_lock_irqsave (& cpm1_gc -> lock , flags );
568564
569- __cpm1_gpio32_set (mm_gc , pin_mask , value );
565+ __cpm1_gpio32_set (cpm1_gc , pin_mask , value );
570566
571567 spin_unlock_irqrestore (& cpm1_gc -> lock , flags );
572568}
573569
574570static int cpm1_gpio32_dir_out (struct gpio_chip * gc , unsigned int gpio , int val )
575571{
576- struct of_mm_gpio_chip * mm_gc = to_of_mm_gpio_chip (gc );
577- struct cpm1_gpio32_chip * cpm1_gc = gpiochip_get_data (& mm_gc -> gc );
578- struct cpm_ioport32b __iomem * iop = mm_gc -> regs ;
572+ struct cpm1_gpio32_chip * cpm1_gc = gpiochip_get_data (gc );
573+ struct cpm_ioport32b __iomem * iop = cpm1_gc -> regs ;
579574 unsigned long flags ;
580575 u32 pin_mask = 1 << (31 - gpio );
581576
582577 spin_lock_irqsave (& cpm1_gc -> lock , flags );
583578
584579 setbits32 (& iop -> dir , pin_mask );
585- __cpm1_gpio32_set (mm_gc , pin_mask , val );
580+ __cpm1_gpio32_set (cpm1_gc , pin_mask , val );
586581
587582 spin_unlock_irqrestore (& cpm1_gc -> lock , flags );
588583
@@ -591,9 +586,8 @@ static int cpm1_gpio32_dir_out(struct gpio_chip *gc, unsigned int gpio, int val)
591586
592587static int cpm1_gpio32_dir_in (struct gpio_chip * gc , unsigned int gpio )
593588{
594- struct of_mm_gpio_chip * mm_gc = to_of_mm_gpio_chip (gc );
595- struct cpm1_gpio32_chip * cpm1_gc = gpiochip_get_data (& mm_gc -> gc );
596- struct cpm_ioport32b __iomem * iop = mm_gc -> regs ;
589+ struct cpm1_gpio32_chip * cpm1_gc = gpiochip_get_data (gc );
590+ struct cpm_ioport32b __iomem * iop = cpm1_gc -> regs ;
597591 unsigned long flags ;
598592 u32 pin_mask = 1 << (31 - gpio );
599593
@@ -610,19 +604,16 @@ int cpm1_gpiochip_add32(struct device *dev)
610604{
611605 struct device_node * np = dev -> of_node ;
612606 struct cpm1_gpio32_chip * cpm1_gc ;
613- struct of_mm_gpio_chip * mm_gc ;
614607 struct gpio_chip * gc ;
615608
616- cpm1_gc = kzalloc ( sizeof (* cpm1_gc ), GFP_KERNEL );
609+ cpm1_gc = devm_kzalloc ( dev , sizeof (* cpm1_gc ), GFP_KERNEL );
617610 if (!cpm1_gc )
618611 return - ENOMEM ;
619612
620613 spin_lock_init (& cpm1_gc -> lock );
621614
622- mm_gc = & cpm1_gc -> mm_gc ;
623- gc = & mm_gc -> gc ;
624-
625- mm_gc -> save_regs = cpm1_gpio32_save_regs ;
615+ gc = & cpm1_gc -> gc ;
616+ gc -> base = -1 ;
626617 gc -> ngpio = 32 ;
627618 gc -> direction_input = cpm1_gpio32_dir_in ;
628619 gc -> direction_output = cpm1_gpio32_dir_out ;
@@ -631,7 +622,17 @@ int cpm1_gpiochip_add32(struct device *dev)
631622 gc -> parent = dev ;
632623 gc -> owner = THIS_MODULE ;
633624
634- return of_mm_gpiochip_add_data (np , mm_gc , cpm1_gc );
625+ gc -> label = devm_kasprintf (dev , GFP_KERNEL , "%pOF" , np );
626+ if (!gc -> label )
627+ return - ENOMEM ;
628+
629+ cpm1_gc -> regs = devm_of_iomap (dev , np , 0 , NULL );
630+ if (IS_ERR (cpm1_gc -> regs ))
631+ return PTR_ERR (cpm1_gc -> regs );
632+
633+ cpm1_gpio32_save_regs (cpm1_gc );
634+
635+ return devm_gpiochip_add_data (dev , gc , cpm1_gc );
635636}
636637
637638#endif /* CONFIG_8xx_GPIO */
0 commit comments