leds-an30259a.c (c900529f3d9161bfde5cca0754f83b4d3c3e0220) leds-an30259a.c (3ead19aa341de89a8c3d88a091d8093ebea622e8)
1// SPDX-License-Identifier: GPL-2.0+
2//
3// Driver for Panasonic AN30259A 3-channel LED driver
4//
5// Copyright (c) 2018 Simon Shields <simon@lineageos.org>
6//
7// Datasheet:
8// https://www.alliedelec.com/m/d/a9d2b3ee87c2d1a535a41dd747b1c247.pdf

--- 269 unchanged lines hidden (view full) ---

278 chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL);
279 if (!chip)
280 return -ENOMEM;
281
282 err = an30259a_dt_init(client, chip);
283 if (err < 0)
284 return err;
285
1// SPDX-License-Identifier: GPL-2.0+
2//
3// Driver for Panasonic AN30259A 3-channel LED driver
4//
5// Copyright (c) 2018 Simon Shields <simon@lineageos.org>
6//
7// Datasheet:
8// https://www.alliedelec.com/m/d/a9d2b3ee87c2d1a535a41dd747b1c247.pdf

--- 269 unchanged lines hidden (view full) ---

278 chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL);
279 if (!chip)
280 return -ENOMEM;
281
282 err = an30259a_dt_init(client, chip);
283 if (err < 0)
284 return err;
285
286 mutex_init(&chip->mutex);
286 err = devm_mutex_init(&client->dev, &chip->mutex);
287 if (err)
288 return err;
289
287 chip->client = client;
288 i2c_set_clientdata(client, chip);
289
290 chip->regmap = devm_regmap_init_i2c(client, &an30259a_regmap_config);
291
292 if (IS_ERR(chip->regmap)) {
293 err = PTR_ERR(chip->regmap);
294 dev_err(&client->dev, "Failed to allocate register map: %d\n",

--- 17 unchanged lines hidden (view full) ---

312 &chip->leds[i].cdev,
313 &init_data);
314 if (err < 0)
315 goto exit;
316 }
317 return 0;
318
319exit:
290 chip->client = client;
291 i2c_set_clientdata(client, chip);
292
293 chip->regmap = devm_regmap_init_i2c(client, &an30259a_regmap_config);
294
295 if (IS_ERR(chip->regmap)) {
296 err = PTR_ERR(chip->regmap);
297 dev_err(&client->dev, "Failed to allocate register map: %d\n",

--- 17 unchanged lines hidden (view full) ---

315 &chip->leds[i].cdev,
316 &init_data);
317 if (err < 0)
318 goto exit;
319 }
320 return 0;
321
322exit:
320 mutex_destroy(&chip->mutex);
321 return err;
322}
323
323 return err;
324}
325
324static void an30259a_remove(struct i2c_client *client)
325{
326 struct an30259a *chip = i2c_get_clientdata(client);
327
328 mutex_destroy(&chip->mutex);
329}
330
331static const struct of_device_id an30259a_match_table[] = {
332 { .compatible = "panasonic,an30259a", },
333 { /* sentinel */ },
334};
335
336MODULE_DEVICE_TABLE(of, an30259a_match_table);
337
338static const struct i2c_device_id an30259a_id[] = {
339 { "an30259a", 0 },
340 { /* sentinel */ },
341};
342MODULE_DEVICE_TABLE(i2c, an30259a_id);
343
344static struct i2c_driver an30259a_driver = {
345 .driver = {
346 .name = "leds-an30259a",
347 .of_match_table = an30259a_match_table,
348 },
349 .probe = an30259a_probe,
326static const struct of_device_id an30259a_match_table[] = {
327 { .compatible = "panasonic,an30259a", },
328 { /* sentinel */ },
329};
330
331MODULE_DEVICE_TABLE(of, an30259a_match_table);
332
333static const struct i2c_device_id an30259a_id[] = {
334 { "an30259a", 0 },
335 { /* sentinel */ },
336};
337MODULE_DEVICE_TABLE(i2c, an30259a_id);
338
339static struct i2c_driver an30259a_driver = {
340 .driver = {
341 .name = "leds-an30259a",
342 .of_match_table = an30259a_match_table,
343 },
344 .probe = an30259a_probe,
350 .remove = an30259a_remove,
351 .id_table = an30259a_id,
352};
353
354module_i2c_driver(an30259a_driver);
355
356MODULE_AUTHOR("Simon Shields <simon@lineageos.org>");
357MODULE_DESCRIPTION("AN30259A LED driver");
358MODULE_LICENSE("GPL v2");
345 .id_table = an30259a_id,
346};
347
348module_i2c_driver(an30259a_driver);
349
350MODULE_AUTHOR("Simon Shields <simon@lineageos.org>");
351MODULE_DESCRIPTION("AN30259A LED driver");
352MODULE_LICENSE("GPL v2");