// SPDX-License-Identifier: GPL-2.0-or-later/* * MIPI Display Bus Interface (DBI) LCD controller support * * Copyright 2016 Noralf Trønnes */#include<linux/backlight.h>#include<linux/debugfs.h>#include<linux/delay.h>#include<linux/gpio/consumer.h>#include<linux/module.h>#include<linux/regulator/consumer.h>#include<linux/spi/spi.h>#include<drm/drm_connector.h>#include<drm/drm_damage_helper.h>#include<drm/drm_drv.h>#include<drm/drm_file.h>#include<drm/drm_format_helper.h>#include<drm/drm_fourcc.h>#include<drm/drm_framebuffer.h>#include<drm/drm_gem.h>#include<drm/drm_gem_atomic_helper.h>#include<drm/drm_gem_framebuffer_helper.h>#include<drm/drm_mipi_dbi.h>#include<drm/drm_modes.h>#include<drm/drm_probe_helper.h>#include<drm/drm_rect.h>#include<video/mipi_display.h>#define MIPI_DBI_MAX_SPI_READ_SPEED 2000000 /* 2MHz */#define DCS_POWER_MODE_DISPLAY BIT(2)#define DCS_POWER_MODE_DISPLAY_NORMAL_MODE BIT(3)#define DCS_POWER_MODE_SLEEP_MODE BIT(4)#define DCS_POWER_MODE_PARTIAL_MODE BIT(5)#define DCS_POWER_MODE_IDLE_MODE BIT(6)#define DCS_POWER_MODE_RESERVED_MASK (BIT(0) | BIT(1) | BIT(7))/** * DOC: overview * * This library provides helpers for MIPI Display Bus Interface (DBI) * compatible display controllers. * * Many controllers for tiny lcd displays are MIPI compliant and can use this * library. If a controller uses registers 0x2A and 0x2B to set the area to * update and uses register 0x2C to write to frame memory, it is most likely * MIPI compliant. * * Only MIPI Type 1 displays are supported since a full frame memory is needed. * * There are 3 MIPI DBI implementation types: * * A. Motorola 6800 type parallel bus *