@@ -92,6 +92,13 @@ static irqreturn_t mcs_touchkey_interrupt(int irq, void *dev_id)
9292 return IRQ_HANDLED ;
9393}
9494
95+ static void mcs_touchkey_poweroff (void * data )
96+ {
97+ struct mcs_touchkey_data * touchkey = data ;
98+
99+ touchkey -> poweron (false);
100+ }
101+
95102static int mcs_touchkey_probe (struct i2c_client * client )
96103{
97104 const struct i2c_device_id * id = i2c_client_get_device_id (client );
@@ -109,13 +116,16 @@ static int mcs_touchkey_probe(struct i2c_client *client)
109116 return - EINVAL ;
110117 }
111118
112- data = kzalloc (struct_size (data , keycodes , pdata -> key_maxval + 1 ),
113- GFP_KERNEL );
114- input_dev = input_allocate_device ();
115- if (!data || !input_dev ) {
116- dev_err (& client -> dev , "Failed to allocate memory\n" );
117- error = - ENOMEM ;
118- goto err_free_mem ;
119+ data = devm_kzalloc (& client -> dev ,
120+ struct_size (data , keycodes , pdata -> key_maxval + 1 ),
121+ GFP_KERNEL );
122+ if (!data )
123+ return - ENOMEM ;
124+
125+ input_dev = devm_input_allocate_device (& client -> dev );
126+ if (!input_dev ) {
127+ dev_err (& client -> dev , "Failed to allocate input device\n" );
128+ return - ENOMEM ;
119129 }
120130
121131 data -> client = client ;
@@ -136,15 +146,13 @@ static int mcs_touchkey_probe(struct i2c_client *client)
136146
137147 fw_ver = i2c_smbus_read_byte_data (client , fw_reg );
138148 if (fw_ver < 0 ) {
139- error = fw_ver ;
140149 dev_err (& client -> dev , "i2c read error[%d]\n" , error );
141- goto err_free_mem ;
150+ return fw_ver ;
142151 }
143152 dev_info (& client -> dev , "Firmware version: %d\n" , fw_ver );
144153
145154 input_dev -> name = "MELFAS MCS Touchkey" ;
146155 input_dev -> id .bustype = BUS_I2C ;
147- input_dev -> dev .parent = & client -> dev ;
148156 input_dev -> evbit [0 ] = BIT_MASK (EV_KEY );
149157 if (!pdata -> no_autorepeat )
150158 input_dev -> evbit [0 ] |= BIT_MASK (EV_REP );
@@ -169,40 +177,28 @@ static int mcs_touchkey_probe(struct i2c_client *client)
169177 if (pdata -> poweron ) {
170178 data -> poweron = pdata -> poweron ;
171179 data -> poweron (true);
180+
181+ error = devm_add_action_or_reset (& client -> dev ,
182+ mcs_touchkey_poweroff , data );
183+ if (error )
184+ return error ;
172185 }
173186
174- error = request_threaded_irq (client -> irq , NULL , mcs_touchkey_interrupt ,
175- IRQF_TRIGGER_FALLING | IRQF_ONESHOT ,
176- client -> dev .driver -> name , data );
187+ error = devm_request_threaded_irq (& client -> dev , client -> irq ,
188+ NULL , mcs_touchkey_interrupt ,
189+ IRQF_TRIGGER_FALLING | IRQF_ONESHOT ,
190+ client -> dev .driver -> name , data );
177191 if (error ) {
178192 dev_err (& client -> dev , "Failed to register interrupt\n" );
179- goto err_free_mem ;
193+ return error ;
180194 }
181195
182196 error = input_register_device (input_dev );
183197 if (error )
184- goto err_free_irq ;
198+ return error ;
185199
186200 i2c_set_clientdata (client , data );
187201 return 0 ;
188-
189- err_free_irq :
190- free_irq (client -> irq , data );
191- err_free_mem :
192- input_free_device (input_dev );
193- kfree (data );
194- return error ;
195- }
196-
197- static void mcs_touchkey_remove (struct i2c_client * client )
198- {
199- struct mcs_touchkey_data * data = i2c_get_clientdata (client );
200-
201- free_irq (client -> irq , data );
202- if (data -> poweron )
203- data -> poweron (false);
204- input_unregister_device (data -> input_dev );
205- kfree (data );
206202}
207203
208204static void mcs_touchkey_shutdown (struct i2c_client * client )
@@ -259,7 +255,6 @@ static struct i2c_driver mcs_touchkey_driver = {
259255 .pm = pm_sleep_ptr (& mcs_touchkey_pm_ops ),
260256 },
261257 .probe = mcs_touchkey_probe ,
262- .remove = mcs_touchkey_remove ,
263258 .shutdown = mcs_touchkey_shutdown ,
264259 .id_table = mcs_touchkey_id ,
265260};
0 commit comments