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"); |