On 1/25/22 11:57 AM, Noralf Trønnes wrote:
Add a driver that will work with most MIPI DBI compatible SPI panels.
This avoids adding a driver for every new MIPI DBI compatible controller
that is to be used by Linux. The 'compatible' Device Tree property with
a '.bin' suffix will be used to load a firmware file that contains the
controller configuration.
Example (driver will load sainsmart18.bin):
display@0 {
compatible = "sainsmart18", "panel-mipi-dbi-spi";
reg = <0>;
reset-gpios = <&gpio 25 0>;
dc-gpios = <&gpio 24 0>;
};
...
+static int panel_mipi_dbi_spi_probe(struct spi_device *spi)
+{
+ struct device *dev = &spi->dev;
+ struct drm_display_mode mode;
+ struct mipi_dbi_dev *dbidev;
+ const struct firmware *fw;
+ const char *compatible;
+ struct drm_device *drm;
+ struct property *prop;
+ bool fw_found = false;
+ struct mipi_dbi *dbi;
+ struct gpio_desc *dc;
+ char fw_name[40];
+ int ret;
+
+ dbidev = devm_drm_dev_alloc(dev, &panel_mipi_dbi_driver, struct
mipi_dbi_dev, drm);
+ if (IS_ERR(dbidev))
+ return PTR_ERR(dbidev);
+
+ dbi = &dbidev->dbi;
+ drm = &dbidev->drm;
+
+ of_property_for_each_string(dev->of_node, "compatible", prop,
compatible) {
+ snprintf(fw_name, sizeof(fw_name), "%s.bin", compatible);
+
+ ret = firmware_request_nowarn(&fw, fw_name, dev);
+ if (ret) {
+ drm_dbg(drm, "No config file found for compatible: '%s'
(error=%d)\n",
+ compatible, ret);
+ continue;
+ }
+
Should we add a directory prefix to the firmware file name to avoid the
possibility of
file name clashes with unrelated firmwares?