@@ -178,18 +178,19 @@ int platform_get_irq_optional(struct platform_device *dev, unsigned int num)
178178 ret = dev -> archdata .irqs [num ];
179179 goto out ;
180180#else
181+ struct fwnode_handle * fwnode = dev_fwnode (& dev -> dev );
181182 struct resource * r ;
182183
183- if (IS_ENABLED ( CONFIG_OF_IRQ ) && dev -> dev . of_node ) {
184- ret = of_irq_get (dev -> dev . of_node , num );
184+ if (is_of_node ( fwnode ) ) {
185+ ret = of_irq_get (to_of_node ( fwnode ) , num );
185186 if (ret > 0 || ret == - EPROBE_DEFER )
186187 goto out ;
187188 }
188189
189190 r = platform_get_resource (dev , IORESOURCE_IRQ , num );
190- if (has_acpi_companion ( & dev -> dev )) {
191+ if (is_acpi_device_node ( fwnode )) {
191192 if (r && r -> flags & IORESOURCE_DISABLED ) {
192- ret = acpi_irq_get (ACPI_HANDLE ( & dev -> dev ), num , r );
193+ ret = acpi_irq_get (ACPI_HANDLE_FWNODE ( fwnode ), num , r );
193194 if (ret )
194195 goto out ;
195196 }
@@ -222,8 +223,8 @@ int platform_get_irq_optional(struct platform_device *dev, unsigned int num)
222223 * the device will only expose one IRQ, and this fallback
223224 * allows a common code path across either kind of resource.
224225 */
225- if (num == 0 && has_acpi_companion ( & dev -> dev )) {
226- ret = acpi_dev_gpio_irq_get (ACPI_COMPANION ( & dev -> dev ), num );
226+ if (num == 0 && is_acpi_device_node ( fwnode )) {
227+ ret = acpi_dev_gpio_irq_get (to_acpi_device_node ( fwnode ), num );
227228 /* Our callers expect -ENXIO for missing IRQs. */
228229 if (ret >= 0 || ret == - EPROBE_DEFER )
229230 goto out ;
@@ -291,7 +292,7 @@ EXPORT_SYMBOL_GPL(platform_irq_count);
291292
292293struct irq_affinity_devres {
293294 unsigned int count ;
294- unsigned int irq [];
295+ unsigned int irq [] __counted_by ( count ) ;
295296};
296297
297298static void platform_disable_acpi_irq (struct platform_device * pdev , int index )
@@ -312,7 +313,7 @@ static void devm_platform_get_irqs_affinity_release(struct device *dev,
312313 for (i = 0 ; i < ptr -> count ; i ++ ) {
313314 irq_dispose_mapping (ptr -> irq [i ]);
314315
315- if (has_acpi_companion ( dev ))
316+ if (is_acpi_device_node ( dev_fwnode ( dev ) ))
316317 platform_disable_acpi_irq (to_platform_device (dev ), i );
317318 }
318319}
@@ -655,23 +656,21 @@ EXPORT_SYMBOL_GPL(platform_device_add_data);
655656 */
656657int platform_device_add (struct platform_device * pdev )
657658{
659+ struct device * dev = & pdev -> dev ;
658660 u32 i ;
659661 int ret ;
660662
661- if (!pdev )
662- return - EINVAL ;
663-
664- if (!pdev -> dev .parent )
665- pdev -> dev .parent = & platform_bus ;
663+ if (!dev -> parent )
664+ dev -> parent = & platform_bus ;
666665
667- pdev -> dev . bus = & platform_bus_type ;
666+ dev -> bus = & platform_bus_type ;
668667
669668 switch (pdev -> id ) {
670669 default :
671- dev_set_name (& pdev -> dev , "%s.%d" , pdev -> name , pdev -> id );
670+ dev_set_name (dev , "%s.%d" , pdev -> name , pdev -> id );
672671 break ;
673672 case PLATFORM_DEVID_NONE :
674- dev_set_name (& pdev -> dev , "%s" , pdev -> name );
673+ dev_set_name (dev , "%s" , pdev -> name );
675674 break ;
676675 case PLATFORM_DEVID_AUTO :
677676 /*
@@ -681,18 +680,18 @@ int platform_device_add(struct platform_device *pdev)
681680 */
682681 ret = ida_alloc (& platform_devid_ida , GFP_KERNEL );
683682 if (ret < 0 )
684- goto err_out ;
683+ return ret ;
685684 pdev -> id = ret ;
686685 pdev -> id_auto = true;
687- dev_set_name (& pdev -> dev , "%s.%d.auto" , pdev -> name , pdev -> id );
686+ dev_set_name (dev , "%s.%d.auto" , pdev -> name , pdev -> id );
688687 break ;
689688 }
690689
691690 for (i = 0 ; i < pdev -> num_resources ; i ++ ) {
692691 struct resource * p , * r = & pdev -> resource [i ];
693692
694693 if (r -> name == NULL )
695- r -> name = dev_name (& pdev -> dev );
694+ r -> name = dev_name (dev );
696695
697696 p = r -> parent ;
698697 if (!p ) {
@@ -705,18 +704,20 @@ int platform_device_add(struct platform_device *pdev)
705704 if (p ) {
706705 ret = insert_resource (p , r );
707706 if (ret ) {
708- dev_err (& pdev -> dev , "failed to claim resource %d: %pR\n" , i , r );
707+ dev_err (dev , "failed to claim resource %d: %pR\n" , i , r );
709708 goto failed ;
710709 }
711710 }
712711 }
713712
714- pr_debug ("Registering platform device '%s'. Parent at %s\n" ,
715- dev_name (& pdev -> dev ), dev_name ( pdev -> dev . parent ));
713+ pr_debug ("Registering platform device '%s'. Parent at %s\n" , dev_name ( dev ),
714+ dev_name (dev -> parent ));
716715
717- ret = device_add (& pdev -> dev );
718- if (ret == 0 )
719- return ret ;
716+ ret = device_add (dev );
717+ if (ret )
718+ goto failed ;
719+
720+ return 0 ;
720721
721722 failed :
722723 if (pdev -> id_auto ) {
@@ -730,7 +731,6 @@ int platform_device_add(struct platform_device *pdev)
730731 release_resource (r );
731732 }
732733
733- err_out :
734734 return ret ;
735735}
736736EXPORT_SYMBOL_GPL (platform_device_add );
@@ -1447,21 +1447,22 @@ static void platform_shutdown(struct device *_dev)
14471447static int platform_dma_configure (struct device * dev )
14481448{
14491449 struct platform_driver * drv = to_platform_driver (dev -> driver );
1450+ struct fwnode_handle * fwnode = dev_fwnode (dev );
14501451 enum dev_dma_attr attr ;
14511452 int ret = 0 ;
14521453
1453- if (dev -> of_node ) {
1454- ret = of_dma_configure (dev , dev -> of_node , true);
1455- } else if (has_acpi_companion ( dev )) {
1456- attr = acpi_get_dma_attr (to_acpi_device_node (dev -> fwnode ));
1454+ if (is_of_node ( fwnode ) ) {
1455+ ret = of_dma_configure (dev , to_of_node ( fwnode ) , true);
1456+ } else if (is_acpi_device_node ( fwnode )) {
1457+ attr = acpi_get_dma_attr (to_acpi_device_node (fwnode ));
14571458 ret = acpi_dma_configure (dev , attr );
14581459 }
1460+ if (ret || drv -> driver_managed_dma )
1461+ return ret ;
14591462
1460- if (!ret && !drv -> driver_managed_dma ) {
1461- ret = iommu_device_use_default_domain (dev );
1462- if (ret )
1463- arch_teardown_dma_ops (dev );
1464- }
1463+ ret = iommu_device_use_default_domain (dev );
1464+ if (ret )
1465+ arch_teardown_dma_ops (dev );
14651466
14661467 return ret ;
14671468}
0 commit comments