mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-09-18 23:09:29 +02:00
While being less compact, using named initializers allows to more easily see which members of the structs are assigned which value without having to lookup the declaration of the struct. And it's also more robust against changes to the struct definition. The mentioned robustness is relevant for a planned change to struct spi_device_id that replaces .driver_data by an anonymous union. Also adapt spacing and usage of commas to the most common style. This patch doesn't modify the compiled array, only its representation in source form benefits. Signed-off-by: Uwe Kleine-König (The Capable Hub) <u.kleine-koenig@baylibre.com> Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com> Link: https://patch.msgid.link/f83c8292e7e3ba9425792591fb136d4ae1468215.1783003256.git.u.kleine-koenig@baylibre.com Signed-off-by: Lee Jones <lee@kernel.org>
69 lines
1.6 KiB
C
69 lines
1.6 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* CS40L50 Advanced Haptic Driver with waveform memory,
|
|
* integrated DSP, and closed-loop algorithms
|
|
*
|
|
* Copyright 2024 Cirrus Logic, Inc.
|
|
*
|
|
* Author: James Ogletree <james.ogletree@cirrus.com>
|
|
*/
|
|
|
|
#include <linux/mfd/cs40l50.h>
|
|
#include <linux/spi/spi.h>
|
|
|
|
static int cs40l50_spi_probe(struct spi_device *spi)
|
|
{
|
|
struct cs40l50 *cs40l50;
|
|
|
|
cs40l50 = devm_kzalloc(&spi->dev, sizeof(*cs40l50), GFP_KERNEL);
|
|
if (!cs40l50)
|
|
return -ENOMEM;
|
|
|
|
spi_set_drvdata(spi, cs40l50);
|
|
|
|
cs40l50->dev = &spi->dev;
|
|
cs40l50->irq = spi->irq;
|
|
|
|
cs40l50->regmap = devm_regmap_init_spi(spi, &cs40l50_regmap);
|
|
if (IS_ERR(cs40l50->regmap))
|
|
return dev_err_probe(cs40l50->dev, PTR_ERR(cs40l50->regmap),
|
|
"Failed to initialize register map\n");
|
|
|
|
return cs40l50_probe(cs40l50);
|
|
}
|
|
|
|
static void cs40l50_spi_remove(struct spi_device *spi)
|
|
{
|
|
struct cs40l50 *cs40l50 = spi_get_drvdata(spi);
|
|
|
|
cs40l50_remove(cs40l50);
|
|
}
|
|
|
|
static const struct spi_device_id cs40l50_id_spi[] = {
|
|
{ .name = "cs40l50" },
|
|
{ }
|
|
};
|
|
MODULE_DEVICE_TABLE(spi, cs40l50_id_spi);
|
|
|
|
static const struct of_device_id cs40l50_of_match[] = {
|
|
{ .compatible = "cirrus,cs40l50" },
|
|
{}
|
|
};
|
|
MODULE_DEVICE_TABLE(of, cs40l50_of_match);
|
|
|
|
static struct spi_driver cs40l50_spi_driver = {
|
|
.driver = {
|
|
.name = "cs40l50",
|
|
.of_match_table = cs40l50_of_match,
|
|
.pm = pm_ptr(&cs40l50_pm_ops),
|
|
},
|
|
.id_table = cs40l50_id_spi,
|
|
.probe = cs40l50_spi_probe,
|
|
.remove = cs40l50_spi_remove,
|
|
};
|
|
module_spi_driver(cs40l50_spi_driver);
|
|
|
|
MODULE_DESCRIPTION("CS40L50 SPI Driver");
|
|
MODULE_AUTHOR("James Ogletree, Cirrus Logic Inc. <james.ogletree@cirrus.com>");
|
|
MODULE_LICENSE("GPL");
|