55// Copyright (C) 2023 Cirrus Logic, Inc. and
66// Cirrus Logic International Semiconductor Ltd.
77
8- #include <kunit/platform_device.h>
98#include <kunit/resource.h>
109#include <kunit/test.h>
1110#include <linux/device.h>
11+ #include <linux/device/devres.h>
1212#include <linux/device/faux.h>
1313#include <linux/gpio/driver.h>
1414#include <linux/module.h>
15- #include <linux/platform_device.h>
1615
1716#include "cirrus_scodec.h"
1817
@@ -29,7 +28,7 @@ struct cirrus_scodec_test_gpio {
2928
3029struct cirrus_scodec_test_priv {
3130 struct faux_device * amp_dev ;
32- struct platform_device * gpio_pdev ;
31+ struct faux_device * gpio_dev ;
3332 struct cirrus_scodec_test_gpio * gpio_priv ;
3433};
3534
@@ -92,59 +91,57 @@ static const struct gpio_chip cirrus_scodec_test_gpio_chip = {
9291 .ngpio = 32 ,
9392};
9493
95- static int cirrus_scodec_test_gpio_probe (struct platform_device * pdev )
94+ /* software_node referencing the gpio driver */
95+ static const struct software_node cirrus_scodec_test_gpio_swnode = {
96+ .name = "cirrus_scodec_test_gpio" ,
97+ };
98+
99+ static int cirrus_scodec_test_gpio_probe (struct faux_device * fdev )
96100{
97101 struct cirrus_scodec_test_gpio * gpio_priv ;
98102 int ret ;
99103
100- gpio_priv = devm_kzalloc (& pdev -> dev , sizeof (* gpio_priv ), GFP_KERNEL );
104+ gpio_priv = devm_kzalloc (& fdev -> dev , sizeof (* gpio_priv ), GFP_KERNEL );
101105 if (!gpio_priv )
102106 return - ENOMEM ;
103107
108+ ret = device_add_software_node (& fdev -> dev , & cirrus_scodec_test_gpio_swnode );
109+ if (ret )
110+ return ret ;
111+
112+ ret = devm_add_action_or_reset (& fdev -> dev , device_remove_software_node_wrapper ,
113+ & fdev -> dev );
114+ if (ret )
115+ return ret ;
116+
104117 /* GPIO core modifies our struct gpio_chip so use a copy */
105118 gpio_priv -> chip = cirrus_scodec_test_gpio_chip ;
106- gpio_priv -> chip .parent = & pdev -> dev ;
107- ret = devm_gpiochip_add_data (& pdev -> dev , & gpio_priv -> chip , gpio_priv );
119+ gpio_priv -> chip .parent = & fdev -> dev ;
120+ ret = devm_gpiochip_add_data (& fdev -> dev , & gpio_priv -> chip , gpio_priv );
108121 if (ret )
109- return dev_err_probe (& pdev -> dev , ret , "Failed to add gpiochip\n" );
122+ return dev_err_probe (& fdev -> dev , ret , "Failed to add gpiochip\n" );
110123
111- dev_set_drvdata (& pdev -> dev , gpio_priv );
124+ dev_set_drvdata (& fdev -> dev , gpio_priv );
112125
113126 return 0 ;
114127}
115128
116- static struct platform_driver cirrus_scodec_test_gpio_driver = {
117- .driver .name = "cirrus_scodec_test_gpio_drv ",
118- .driver .owner = THIS_MODULE ,
129+ static const struct faux_device_ops cirrus_scodec_test_gpio_driver_ops = {
119130 .probe = cirrus_scodec_test_gpio_probe ,
120131};
121132
122- /* software_node referencing the gpio driver */
123- static const struct software_node cirrus_scodec_test_gpio_swnode = {
124- .name = "cirrus_scodec_test_gpio" ,
125- };
126-
127133static void cirrus_scodec_test_create_gpio (struct kunit * test )
128134{
129135 struct cirrus_scodec_test_priv * priv = test -> priv ;
130136
131- KUNIT_ASSERT_EQ (test , 0 ,
132- kunit_platform_driver_register (test , & cirrus_scodec_test_gpio_driver ));
133-
134- priv -> gpio_pdev = kunit_platform_device_alloc (test ,
135- cirrus_scodec_test_gpio_driver .driver .name ,
136- PLATFORM_DEVID_NONE );
137- KUNIT_ASSERT_NOT_NULL (test , priv -> gpio_pdev );
138-
139- KUNIT_ASSERT_EQ (test , 0 , device_add_software_node (& priv -> gpio_pdev -> dev ,
140- & cirrus_scodec_test_gpio_swnode ));
137+ priv -> gpio_dev = faux_device_create ("cirrus_scodec_test_gpio_drv" , NULL ,
138+ & cirrus_scodec_test_gpio_driver_ops );
139+ KUNIT_ASSERT_NOT_NULL (test , priv -> gpio_dev );
141140 KUNIT_ASSERT_EQ (test , 0 , kunit_add_action_or_reset (test ,
142- device_remove_software_node_wrapper ,
143- & priv -> gpio_pdev -> dev ));
144-
145- KUNIT_ASSERT_EQ (test , 0 , kunit_platform_device_add (test , priv -> gpio_pdev ));
141+ faux_device_destroy_wrapper ,
142+ priv -> gpio_dev ));
146143
147- priv -> gpio_priv = dev_get_drvdata (& priv -> gpio_pdev -> dev );
144+ priv -> gpio_priv = dev_get_drvdata (& priv -> gpio_dev -> dev );
148145 KUNIT_ASSERT_NOT_NULL (test , priv -> gpio_priv );
149146}
150147
0 commit comments