@ -52,8 +52,6 @@ struct vx855_gpio {
spinlock_t lock ;
u32 io_gpi ;
u32 io_gpo ;
bool gpi_reserved ;
bool gpo_reserved ;
} ;
/* resolve a GPIx into the corresponding bit position */
@ -224,14 +222,13 @@ static int vx855gpio_probe(struct platform_device *pdev)
struct resource * res_gpi ;
struct resource * res_gpo ;
struct vx855_gpio * vg ;
int ret ;
res_gpi = platform_get_resource ( pdev , IORESOURCE_IO , 0 ) ;
res_gpo = platform_get_resource ( pdev , IORESOURCE_IO , 1 ) ;
if ( ! res_gpi | | ! res_gpo )
return - EBUSY ;
vg = kzalloc ( sizeof ( * vg ) , GFP_KERNEL ) ;
vg = devm_ kzalloc( & pdev - > dev , sizeof ( * vg ) , GFP_KERNEL ) ;
if ( ! vg )
return - ENOMEM ;
@ -250,56 +247,27 @@ static int vx855gpio_probe(struct platform_device *pdev)
* succeed . Ignore and continue .
*/
if ( ! request_region ( res_gpi - > start , resource_size ( res_gpi ) ,
MODULE_NAME " _gpi " ) )
if ( ! devm_ request_region( & pdev - > dev , res_gpi - > start ,
resource_size ( res_gpi ) , MODULE_NAME " _gpi " ) )
dev_warn ( & pdev - > dev ,
" GPI I/O resource busy, probably claimed by ACPI \n " ) ;
else
vg - > gpi_reserved = true ;
if ( ! request_region ( res_gpo - > start , resource_size ( res_gpo ) ,
MODULE_NAME " _gpo " ) )
if ( ! devm_request_region ( & pdev - > dev , res_gpo - > start ,
resource_size ( res_gpo ) , MODULE_NAME " _gpo " ) )
dev_warn ( & pdev - > dev ,
" GPO I/O resource busy, probably claimed by ACPI \n " ) ;
else
vg - > gpo_reserved = true ;
vx855gpio_gpio_setup ( vg ) ;
ret = gpiochip_add ( & vg - > gpio ) ;
if ( ret ) {
dev_err ( & pdev - > dev , " failed to register GPIOs \n " ) ;
goto out_release ;
}
return 0 ;
out_release :
if ( vg - > gpi_reserved )
release_region ( res_gpi - > start , resource_size ( res_gpi ) ) ;
if ( vg - > gpo_reserved )
release_region ( res_gpi - > start , resource_size ( res_gpo ) ) ;
kfree ( vg ) ;
return ret ;
return gpiochip_add ( & vg - > gpio ) ;
}
static int vx855gpio_remove ( struct platform_device * pdev )
{
struct vx855_gpio * vg = platform_get_drvdata ( pdev ) ;
struct resource * res ;
gpiochip_remove ( & vg - > gpio ) ;
if ( vg - > gpi_reserved ) {
res = platform_get_resource ( pdev , IORESOURCE_IO , 0 ) ;
release_region ( res - > start , resource_size ( res ) ) ;
}
if ( vg - > gpo_reserved ) {
res = platform_get_resource ( pdev , IORESOURCE_IO , 1 ) ;
release_region ( res - > start , resource_size ( res ) ) ;
}
kfree ( vg ) ;
return 0 ;
}