[PATCH v2 3/3] drm/panel: Add MIPI DBI compatible SPI driver

David Lechner david at lechnology.com
Thu Jan 27 17:19:10 UTC 2022


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 at 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?


More information about the dri-devel mailing list