xref: /linux/drivers/gpu/drm/sitronix/st7571-spi.c (revision c17ee635fd3a482b2ad2bf5e269755c2eae5f25e)
1*052039e3SMarcus Folkesson // SPDX-License-Identifier: GPL-2.0-or-later
2*052039e3SMarcus Folkesson /*
3*052039e3SMarcus Folkesson  * Driver for Sitronix ST7571 connected via SPI bus.
4*052039e3SMarcus Folkesson  *
5*052039e3SMarcus Folkesson  * Copyright (C) 2025 Marcus Folkesson <marcus.folkesson@gmail.com>
6*052039e3SMarcus Folkesson  */
7*052039e3SMarcus Folkesson 
8*052039e3SMarcus Folkesson #include <linux/spi/spi.h>
9*052039e3SMarcus Folkesson #include <linux/module.h>
10*052039e3SMarcus Folkesson #include <linux/regmap.h>
11*052039e3SMarcus Folkesson 
12*052039e3SMarcus Folkesson #include "st7571.h"
13*052039e3SMarcus Folkesson 
14*052039e3SMarcus Folkesson static const struct regmap_config st7571_spi_regmap_config = {
15*052039e3SMarcus Folkesson 	.reg_bits = 8,
16*052039e3SMarcus Folkesson 	.val_bits = 8,
17*052039e3SMarcus Folkesson 	.can_multi_write = true,
18*052039e3SMarcus Folkesson };
19*052039e3SMarcus Folkesson 
20*052039e3SMarcus Folkesson static int st7571_spi_probe(struct spi_device *spi)
21*052039e3SMarcus Folkesson {
22*052039e3SMarcus Folkesson 	struct st7571_device *st7571;
23*052039e3SMarcus Folkesson 	struct regmap *regmap;
24*052039e3SMarcus Folkesson 
25*052039e3SMarcus Folkesson 	regmap = devm_regmap_init_spi(spi, &st7571_spi_regmap_config);
26*052039e3SMarcus Folkesson 	if (IS_ERR(regmap)) {
27*052039e3SMarcus Folkesson 		return dev_err_probe(&spi->dev, PTR_ERR(regmap),
28*052039e3SMarcus Folkesson 				     "Failed to initialize regmap\n");
29*052039e3SMarcus Folkesson 	}
30*052039e3SMarcus Folkesson 
31*052039e3SMarcus Folkesson 	st7571 = st7571_probe(&spi->dev, regmap);
32*052039e3SMarcus Folkesson 	if (IS_ERR(st7571))
33*052039e3SMarcus Folkesson 		return dev_err_probe(&spi->dev, PTR_ERR(st7571),
34*052039e3SMarcus Folkesson 				     "Failed to initialize regmap\n");
35*052039e3SMarcus Folkesson 
36*052039e3SMarcus Folkesson 	spi_set_drvdata(spi, st7571);
37*052039e3SMarcus Folkesson 	return 0;
38*052039e3SMarcus Folkesson }
39*052039e3SMarcus Folkesson 
40*052039e3SMarcus Folkesson static void st7571_spi_remove(struct spi_device *spi)
41*052039e3SMarcus Folkesson {
42*052039e3SMarcus Folkesson 	struct st7571_device *st7571 = spi_get_drvdata(spi);
43*052039e3SMarcus Folkesson 
44*052039e3SMarcus Folkesson 	st7571_remove(st7571);
45*052039e3SMarcus Folkesson }
46*052039e3SMarcus Folkesson 
47*052039e3SMarcus Folkesson static const struct of_device_id st7571_of_match[] = {
48*052039e3SMarcus Folkesson 	{ .compatible = "sitronix,st7567", .data = &st7567_config },
49*052039e3SMarcus Folkesson 	{ .compatible = "sitronix,st7571", .data = &st7571_config },
50*052039e3SMarcus Folkesson 	{},
51*052039e3SMarcus Folkesson };
52*052039e3SMarcus Folkesson MODULE_DEVICE_TABLE(of, st7571_of_match);
53*052039e3SMarcus Folkesson 
54*052039e3SMarcus Folkesson static const struct spi_device_id st7571_spi_id[] = {
55*052039e3SMarcus Folkesson 	{ "st7567", 0 },
56*052039e3SMarcus Folkesson 	{ "st7571", 0 },
57*052039e3SMarcus Folkesson 	{ }
58*052039e3SMarcus Folkesson };
59*052039e3SMarcus Folkesson MODULE_DEVICE_TABLE(spi, st7571_spi_id);
60*052039e3SMarcus Folkesson 
61*052039e3SMarcus Folkesson static struct spi_driver st7571_spi_driver = {
62*052039e3SMarcus Folkesson 	.driver = {
63*052039e3SMarcus Folkesson 		.name = "st7571-spi",
64*052039e3SMarcus Folkesson 		.of_match_table = st7571_of_match,
65*052039e3SMarcus Folkesson 	},
66*052039e3SMarcus Folkesson 	.probe = st7571_spi_probe,
67*052039e3SMarcus Folkesson 	.remove = st7571_spi_remove,
68*052039e3SMarcus Folkesson 	.id_table = st7571_spi_id,
69*052039e3SMarcus Folkesson };
70*052039e3SMarcus Folkesson 
71*052039e3SMarcus Folkesson module_spi_driver(st7571_spi_driver);
72*052039e3SMarcus Folkesson 
73*052039e3SMarcus Folkesson MODULE_AUTHOR("Marcus Folkesson <marcus.folkesson@gmail.com>");
74*052039e3SMarcus Folkesson MODULE_DESCRIPTION("DRM Driver for Sitronix ST7571 LCD controller (SPI)");
75*052039e3SMarcus Folkesson MODULE_LICENSE("GPL");
76*052039e3SMarcus Folkesson MODULE_IMPORT_NS("DRM_ST7571");
77