mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-16 01:54:00 +00:00
Merge tag 'drm-misc-fixes-2024-12-19' of https://gitlab.freedesktop.org/drm/misc/kernel into drm-fixes
drm-misc-fixes for v6.13-rc4: - udma-buf fixes related to sealing. - dma-buf build warning fix when debugfs is not enabled. - Assorted drm/panel fixes. - Correct error return in drm_dp_tunnel_mgr_create. - Fix even more divide by zero in drm_mode_vrefresh. - Fix FBDEV dependencies in Kconfig. - Documentation fix for drm_sched_fini. - IVPU NULL pointer, memory leak and WARN fix. Signed-off-by: Dave Airlie <airlied@redhat.com> From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/d0763051-87b7-483e-89e0-a9f993383450@linux.intel.com
This commit is contained in:
commit
87fd883325
@ -7347,7 +7347,7 @@ F: drivers/gpu/drm/panel/panel-novatek-nt36672a.c
|
|||||||
DRM DRIVER FOR NVIDIA GEFORCE/QUADRO GPUS
|
DRM DRIVER FOR NVIDIA GEFORCE/QUADRO GPUS
|
||||||
M: Karol Herbst <kherbst@redhat.com>
|
M: Karol Herbst <kherbst@redhat.com>
|
||||||
M: Lyude Paul <lyude@redhat.com>
|
M: Lyude Paul <lyude@redhat.com>
|
||||||
M: Danilo Krummrich <dakr@redhat.com>
|
M: Danilo Krummrich <dakr@kernel.org>
|
||||||
L: dri-devel@lists.freedesktop.org
|
L: dri-devel@lists.freedesktop.org
|
||||||
L: nouveau@lists.freedesktop.org
|
L: nouveau@lists.freedesktop.org
|
||||||
S: Supported
|
S: Supported
|
||||||
@ -8924,7 +8924,7 @@ F: include/linux/arm_ffa.h
|
|||||||
FIRMWARE LOADER (request_firmware)
|
FIRMWARE LOADER (request_firmware)
|
||||||
M: Luis Chamberlain <mcgrof@kernel.org>
|
M: Luis Chamberlain <mcgrof@kernel.org>
|
||||||
M: Russ Weight <russ.weight@linux.dev>
|
M: Russ Weight <russ.weight@linux.dev>
|
||||||
M: Danilo Krummrich <dakr@redhat.com>
|
M: Danilo Krummrich <dakr@kernel.org>
|
||||||
L: linux-kernel@vger.kernel.org
|
L: linux-kernel@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/firmware_class/
|
F: Documentation/firmware_class/
|
||||||
|
@ -208,6 +208,7 @@ CONFIG_FB_ATY=y
|
|||||||
CONFIG_FB_ATY_CT=y
|
CONFIG_FB_ATY_CT=y
|
||||||
CONFIG_FB_ATY_GX=y
|
CONFIG_FB_ATY_GX=y
|
||||||
CONFIG_FB_3DFX=y
|
CONFIG_FB_3DFX=y
|
||||||
|
CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
||||||
# CONFIG_VGA_CONSOLE is not set
|
# CONFIG_VGA_CONSOLE is not set
|
||||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
CONFIG_LOGO=y
|
CONFIG_LOGO=y
|
||||||
|
@ -716,6 +716,7 @@ CONFIG_FB_TRIDENT=m
|
|||||||
CONFIG_FB_SM501=m
|
CONFIG_FB_SM501=m
|
||||||
CONFIG_FB_IBM_GXT4500=y
|
CONFIG_FB_IBM_GXT4500=y
|
||||||
CONFIG_LCD_PLATFORM=m
|
CONFIG_LCD_PLATFORM=m
|
||||||
|
CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
||||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
|
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
|
||||||
CONFIG_LOGO=y
|
CONFIG_LOGO=y
|
||||||
|
@ -409,7 +409,7 @@ static void ivpu_bo_print_info(struct ivpu_bo *bo, struct drm_printer *p)
|
|||||||
mutex_lock(&bo->lock);
|
mutex_lock(&bo->lock);
|
||||||
|
|
||||||
drm_printf(p, "%-9p %-3u 0x%-12llx %-10lu 0x%-8x %-4u",
|
drm_printf(p, "%-9p %-3u 0x%-12llx %-10lu 0x%-8x %-4u",
|
||||||
bo, bo->ctx->id, bo->vpu_addr, bo->base.base.size,
|
bo, bo->ctx ? bo->ctx->id : 0, bo->vpu_addr, bo->base.base.size,
|
||||||
bo->flags, kref_read(&bo->base.base.refcount));
|
bo->flags, kref_read(&bo->base.base.refcount));
|
||||||
|
|
||||||
if (bo->base.pages)
|
if (bo->base.pages)
|
||||||
|
@ -612,18 +612,22 @@ int ivpu_mmu_reserved_context_init(struct ivpu_device *vdev)
|
|||||||
if (!ivpu_mmu_ensure_pgd(vdev, &vdev->rctx.pgtable)) {
|
if (!ivpu_mmu_ensure_pgd(vdev, &vdev->rctx.pgtable)) {
|
||||||
ivpu_err(vdev, "Failed to allocate root page table for reserved context\n");
|
ivpu_err(vdev, "Failed to allocate root page table for reserved context\n");
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto unlock;
|
goto err_ctx_fini;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = ivpu_mmu_cd_set(vdev, vdev->rctx.id, &vdev->rctx.pgtable);
|
ret = ivpu_mmu_cd_set(vdev, vdev->rctx.id, &vdev->rctx.pgtable);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
ivpu_err(vdev, "Failed to set context descriptor for reserved context\n");
|
ivpu_err(vdev, "Failed to set context descriptor for reserved context\n");
|
||||||
goto unlock;
|
goto err_ctx_fini;
|
||||||
}
|
}
|
||||||
|
|
||||||
unlock:
|
|
||||||
mutex_unlock(&vdev->rctx.lock);
|
mutex_unlock(&vdev->rctx.lock);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
err_ctx_fini:
|
||||||
|
mutex_unlock(&vdev->rctx.lock);
|
||||||
|
ivpu_mmu_context_fini(vdev, &vdev->rctx);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ivpu_mmu_reserved_context_fini(struct ivpu_device *vdev)
|
void ivpu_mmu_reserved_context_fini(struct ivpu_device *vdev)
|
||||||
|
@ -378,6 +378,7 @@ void ivpu_pm_init(struct ivpu_device *vdev)
|
|||||||
|
|
||||||
pm_runtime_use_autosuspend(dev);
|
pm_runtime_use_autosuspend(dev);
|
||||||
pm_runtime_set_autosuspend_delay(dev, delay);
|
pm_runtime_set_autosuspend_delay(dev, delay);
|
||||||
|
pm_runtime_set_active(dev);
|
||||||
|
|
||||||
ivpu_dbg(vdev, PM, "Autosuspend delay = %d\n", delay);
|
ivpu_dbg(vdev, PM, "Autosuspend delay = %d\n", delay);
|
||||||
}
|
}
|
||||||
@ -392,7 +393,6 @@ void ivpu_pm_enable(struct ivpu_device *vdev)
|
|||||||
{
|
{
|
||||||
struct device *dev = vdev->drm.dev;
|
struct device *dev = vdev->drm.dev;
|
||||||
|
|
||||||
pm_runtime_set_active(dev);
|
|
||||||
pm_runtime_allow(dev);
|
pm_runtime_allow(dev);
|
||||||
pm_runtime_mark_last_busy(dev);
|
pm_runtime_mark_last_busy(dev);
|
||||||
pm_runtime_put_autosuspend(dev);
|
pm_runtime_put_autosuspend(dev);
|
||||||
|
@ -489,7 +489,7 @@ config IMG_ASCII_LCD
|
|||||||
|
|
||||||
config HT16K33
|
config HT16K33
|
||||||
tristate "Holtek Ht16K33 LED controller with keyscan"
|
tristate "Holtek Ht16K33 LED controller with keyscan"
|
||||||
depends on FB && I2C && INPUT
|
depends on FB && I2C && INPUT && BACKLIGHT_CLASS_DEVICE
|
||||||
select FB_SYSMEM_HELPERS
|
select FB_SYSMEM_HELPERS
|
||||||
select INPUT_MATRIXKMAP
|
select INPUT_MATRIXKMAP
|
||||||
select FB_BACKLIGHT
|
select FB_BACKLIGHT
|
||||||
|
@ -60,7 +60,7 @@ static void __dma_buf_debugfs_list_add(struct dma_buf *dmabuf)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __dma_buf_debugfs_list_del(struct file *file)
|
static void __dma_buf_debugfs_list_del(struct dma_buf *dmabuf)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -297,7 +297,7 @@ static const struct dma_buf_ops udmabuf_ops = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#define SEALS_WANTED (F_SEAL_SHRINK)
|
#define SEALS_WANTED (F_SEAL_SHRINK)
|
||||||
#define SEALS_DENIED (F_SEAL_WRITE)
|
#define SEALS_DENIED (F_SEAL_WRITE|F_SEAL_FUTURE_WRITE)
|
||||||
|
|
||||||
static int check_memfd_seals(struct file *memfd)
|
static int check_memfd_seals(struct file *memfd)
|
||||||
{
|
{
|
||||||
@ -317,12 +317,10 @@ static int check_memfd_seals(struct file *memfd)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int export_udmabuf(struct udmabuf *ubuf,
|
static struct dma_buf *export_udmabuf(struct udmabuf *ubuf,
|
||||||
struct miscdevice *device,
|
struct miscdevice *device)
|
||||||
u32 flags)
|
|
||||||
{
|
{
|
||||||
DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
|
DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
|
||||||
struct dma_buf *buf;
|
|
||||||
|
|
||||||
ubuf->device = device;
|
ubuf->device = device;
|
||||||
exp_info.ops = &udmabuf_ops;
|
exp_info.ops = &udmabuf_ops;
|
||||||
@ -330,11 +328,7 @@ static int export_udmabuf(struct udmabuf *ubuf,
|
|||||||
exp_info.priv = ubuf;
|
exp_info.priv = ubuf;
|
||||||
exp_info.flags = O_RDWR;
|
exp_info.flags = O_RDWR;
|
||||||
|
|
||||||
buf = dma_buf_export(&exp_info);
|
return dma_buf_export(&exp_info);
|
||||||
if (IS_ERR(buf))
|
|
||||||
return PTR_ERR(buf);
|
|
||||||
|
|
||||||
return dma_buf_fd(buf, flags);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static long udmabuf_pin_folios(struct udmabuf *ubuf, struct file *memfd,
|
static long udmabuf_pin_folios(struct udmabuf *ubuf, struct file *memfd,
|
||||||
@ -391,6 +385,7 @@ static long udmabuf_create(struct miscdevice *device,
|
|||||||
struct folio **folios = NULL;
|
struct folio **folios = NULL;
|
||||||
pgoff_t pgcnt = 0, pglimit;
|
pgoff_t pgcnt = 0, pglimit;
|
||||||
struct udmabuf *ubuf;
|
struct udmabuf *ubuf;
|
||||||
|
struct dma_buf *dmabuf;
|
||||||
long ret = -EINVAL;
|
long ret = -EINVAL;
|
||||||
u32 i, flags;
|
u32 i, flags;
|
||||||
|
|
||||||
@ -436,23 +431,39 @@ static long udmabuf_create(struct miscdevice *device,
|
|||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Take the inode lock to protect against concurrent
|
||||||
|
* memfd_add_seals(), which takes this lock in write mode.
|
||||||
|
*/
|
||||||
|
inode_lock_shared(file_inode(memfd));
|
||||||
ret = check_memfd_seals(memfd);
|
ret = check_memfd_seals(memfd);
|
||||||
if (ret < 0) {
|
if (ret)
|
||||||
fput(memfd);
|
goto out_unlock;
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = udmabuf_pin_folios(ubuf, memfd, list[i].offset,
|
ret = udmabuf_pin_folios(ubuf, memfd, list[i].offset,
|
||||||
list[i].size, folios);
|
list[i].size, folios);
|
||||||
|
out_unlock:
|
||||||
|
inode_unlock_shared(file_inode(memfd));
|
||||||
fput(memfd);
|
fput(memfd);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
flags = head->flags & UDMABUF_FLAGS_CLOEXEC ? O_CLOEXEC : 0;
|
flags = head->flags & UDMABUF_FLAGS_CLOEXEC ? O_CLOEXEC : 0;
|
||||||
ret = export_udmabuf(ubuf, device, flags);
|
dmabuf = export_udmabuf(ubuf, device);
|
||||||
if (ret < 0)
|
if (IS_ERR(dmabuf)) {
|
||||||
|
ret = PTR_ERR(dmabuf);
|
||||||
goto err;
|
goto err;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Ownership of ubuf is held by the dmabuf from here.
|
||||||
|
* If the following dma_buf_fd() fails, dma_buf_put() cleans up both the
|
||||||
|
* dmabuf and the ubuf (through udmabuf_ops.release).
|
||||||
|
*/
|
||||||
|
|
||||||
|
ret = dma_buf_fd(dmabuf, flags);
|
||||||
|
if (ret < 0)
|
||||||
|
dma_buf_put(dmabuf);
|
||||||
|
|
||||||
kvfree(folios);
|
kvfree(folios);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -99,6 +99,7 @@ config DRM_KUNIT_TEST
|
|||||||
config DRM_KMS_HELPER
|
config DRM_KMS_HELPER
|
||||||
tristate
|
tristate
|
||||||
depends on DRM
|
depends on DRM
|
||||||
|
select FB_CORE if DRM_FBDEV_EMULATION
|
||||||
help
|
help
|
||||||
CRTC helpers for KMS drivers.
|
CRTC helpers for KMS drivers.
|
||||||
|
|
||||||
@ -358,6 +359,7 @@ config DRM_TTM_HELPER
|
|||||||
tristate
|
tristate
|
||||||
depends on DRM
|
depends on DRM
|
||||||
select DRM_TTM
|
select DRM_TTM
|
||||||
|
select FB_CORE if DRM_FBDEV_EMULATION
|
||||||
select FB_SYSMEM_HELPERS_DEFERRED if DRM_FBDEV_EMULATION
|
select FB_SYSMEM_HELPERS_DEFERRED if DRM_FBDEV_EMULATION
|
||||||
help
|
help
|
||||||
Helpers for ttm-based gem objects
|
Helpers for ttm-based gem objects
|
||||||
@ -365,6 +367,7 @@ config DRM_TTM_HELPER
|
|||||||
config DRM_GEM_DMA_HELPER
|
config DRM_GEM_DMA_HELPER
|
||||||
tristate
|
tristate
|
||||||
depends on DRM
|
depends on DRM
|
||||||
|
select FB_CORE if DRM_FBDEV_EMULATION
|
||||||
select FB_DMAMEM_HELPERS_DEFERRED if DRM_FBDEV_EMULATION
|
select FB_DMAMEM_HELPERS_DEFERRED if DRM_FBDEV_EMULATION
|
||||||
help
|
help
|
||||||
Choose this if you need the GEM DMA helper functions
|
Choose this if you need the GEM DMA helper functions
|
||||||
@ -372,6 +375,7 @@ config DRM_GEM_DMA_HELPER
|
|||||||
config DRM_GEM_SHMEM_HELPER
|
config DRM_GEM_SHMEM_HELPER
|
||||||
tristate
|
tristate
|
||||||
depends on DRM && MMU
|
depends on DRM && MMU
|
||||||
|
select FB_CORE if DRM_FBDEV_EMULATION
|
||||||
select FB_SYSMEM_HELPERS_DEFERRED if DRM_FBDEV_EMULATION
|
select FB_SYSMEM_HELPERS_DEFERRED if DRM_FBDEV_EMULATION
|
||||||
help
|
help
|
||||||
Choose this if you need the GEM shmem helper functions
|
Choose this if you need the GEM shmem helper functions
|
||||||
|
@ -1896,8 +1896,8 @@ static void destroy_mgr(struct drm_dp_tunnel_mgr *mgr)
|
|||||||
*
|
*
|
||||||
* Creates a DP tunnel manager for @dev.
|
* Creates a DP tunnel manager for @dev.
|
||||||
*
|
*
|
||||||
* Returns a pointer to the tunnel manager if created successfully or NULL in
|
* Returns a pointer to the tunnel manager if created successfully or error
|
||||||
* case of an error.
|
* pointer in case of failure.
|
||||||
*/
|
*/
|
||||||
struct drm_dp_tunnel_mgr *
|
struct drm_dp_tunnel_mgr *
|
||||||
drm_dp_tunnel_mgr_create(struct drm_device *dev, int max_group_count)
|
drm_dp_tunnel_mgr_create(struct drm_device *dev, int max_group_count)
|
||||||
@ -1907,7 +1907,7 @@ drm_dp_tunnel_mgr_create(struct drm_device *dev, int max_group_count)
|
|||||||
|
|
||||||
mgr = kzalloc(sizeof(*mgr), GFP_KERNEL);
|
mgr = kzalloc(sizeof(*mgr), GFP_KERNEL);
|
||||||
if (!mgr)
|
if (!mgr)
|
||||||
return NULL;
|
return ERR_PTR(-ENOMEM);
|
||||||
|
|
||||||
mgr->dev = dev;
|
mgr->dev = dev;
|
||||||
init_waitqueue_head(&mgr->bw_req_queue);
|
init_waitqueue_head(&mgr->bw_req_queue);
|
||||||
@ -1916,7 +1916,7 @@ drm_dp_tunnel_mgr_create(struct drm_device *dev, int max_group_count)
|
|||||||
if (!mgr->groups) {
|
if (!mgr->groups) {
|
||||||
kfree(mgr);
|
kfree(mgr);
|
||||||
|
|
||||||
return NULL;
|
return ERR_PTR(-ENOMEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG
|
#ifdef CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG
|
||||||
@ -1927,7 +1927,7 @@ drm_dp_tunnel_mgr_create(struct drm_device *dev, int max_group_count)
|
|||||||
if (!init_group(mgr, &mgr->groups[i])) {
|
if (!init_group(mgr, &mgr->groups[i])) {
|
||||||
destroy_mgr(mgr);
|
destroy_mgr(mgr);
|
||||||
|
|
||||||
return NULL;
|
return ERR_PTR(-ENOMEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
mgr->group_count++;
|
mgr->group_count++;
|
||||||
|
@ -1287,14 +1287,11 @@ EXPORT_SYMBOL(drm_mode_set_name);
|
|||||||
*/
|
*/
|
||||||
int drm_mode_vrefresh(const struct drm_display_mode *mode)
|
int drm_mode_vrefresh(const struct drm_display_mode *mode)
|
||||||
{
|
{
|
||||||
unsigned int num, den;
|
unsigned int num = 1, den = 1;
|
||||||
|
|
||||||
if (mode->htotal == 0 || mode->vtotal == 0)
|
if (mode->htotal == 0 || mode->vtotal == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
num = mode->clock;
|
|
||||||
den = mode->htotal * mode->vtotal;
|
|
||||||
|
|
||||||
if (mode->flags & DRM_MODE_FLAG_INTERLACE)
|
if (mode->flags & DRM_MODE_FLAG_INTERLACE)
|
||||||
num *= 2;
|
num *= 2;
|
||||||
if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
|
if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
|
||||||
@ -1302,6 +1299,12 @@ int drm_mode_vrefresh(const struct drm_display_mode *mode)
|
|||||||
if (mode->vscan > 1)
|
if (mode->vscan > 1)
|
||||||
den *= mode->vscan;
|
den *= mode->vscan;
|
||||||
|
|
||||||
|
if (check_mul_overflow(mode->clock, num, &num))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (check_mul_overflow(mode->htotal * mode->vtotal, den, &den))
|
||||||
|
return 0;
|
||||||
|
|
||||||
return DIV_ROUND_CLOSEST_ULL(mul_u32_u32(num, 1000), den);
|
return DIV_ROUND_CLOSEST_ULL(mul_u32_u32(num, 1000), den);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(drm_mode_vrefresh);
|
EXPORT_SYMBOL(drm_mode_vrefresh);
|
||||||
|
@ -565,6 +565,8 @@ static int hx83102_get_modes(struct drm_panel *panel,
|
|||||||
struct drm_display_mode *mode;
|
struct drm_display_mode *mode;
|
||||||
|
|
||||||
mode = drm_mode_duplicate(connector->dev, m);
|
mode = drm_mode_duplicate(connector->dev, m);
|
||||||
|
if (!mode)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;
|
mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;
|
||||||
drm_mode_set_name(mode);
|
drm_mode_set_name(mode);
|
||||||
|
@ -481,9 +481,9 @@ static int nt35950_probe(struct mipi_dsi_device *dsi)
|
|||||||
return dev_err_probe(dev, -EPROBE_DEFER, "Cannot get secondary DSI host\n");
|
return dev_err_probe(dev, -EPROBE_DEFER, "Cannot get secondary DSI host\n");
|
||||||
|
|
||||||
nt->dsi[1] = mipi_dsi_device_register_full(dsi_r_host, info);
|
nt->dsi[1] = mipi_dsi_device_register_full(dsi_r_host, info);
|
||||||
if (!nt->dsi[1]) {
|
if (IS_ERR(nt->dsi[1])) {
|
||||||
dev_err(dev, "Cannot get secondary DSI node\n");
|
dev_err(dev, "Cannot get secondary DSI node\n");
|
||||||
return -ENODEV;
|
return PTR_ERR(nt->dsi[1]);
|
||||||
}
|
}
|
||||||
num_dsis++;
|
num_dsis++;
|
||||||
}
|
}
|
||||||
|
@ -1177,6 +1177,7 @@ static int st7701_probe(struct device *dev, int connector_type)
|
|||||||
return dev_err_probe(dev, ret, "Failed to get orientation\n");
|
return dev_err_probe(dev, ret, "Failed to get orientation\n");
|
||||||
|
|
||||||
drm_panel_init(&st7701->panel, dev, &st7701_funcs, connector_type);
|
drm_panel_init(&st7701->panel, dev, &st7701_funcs, connector_type);
|
||||||
|
st7701->panel.prepare_prev_first = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Once sleep out has been issued, ST7701 IC required to wait 120ms
|
* Once sleep out has been issued, ST7701 IC required to wait 120ms
|
||||||
|
@ -325,7 +325,7 @@ static void r63353_panel_shutdown(struct mipi_dsi_device *dsi)
|
|||||||
{
|
{
|
||||||
struct r63353_panel *rpanel = mipi_dsi_get_drvdata(dsi);
|
struct r63353_panel *rpanel = mipi_dsi_get_drvdata(dsi);
|
||||||
|
|
||||||
r63353_panel_unprepare(&rpanel->base);
|
drm_panel_unprepare(&rpanel->base);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct r63353_desc sharp_ls068b3sx02_data = {
|
static const struct r63353_desc sharp_ls068b3sx02_data = {
|
||||||
|
@ -1355,7 +1355,8 @@ EXPORT_SYMBOL(drm_sched_init);
|
|||||||
* drm_sched_backend_ops.run_job(). Consequently, drm_sched_backend_ops.free_job()
|
* drm_sched_backend_ops.run_job(). Consequently, drm_sched_backend_ops.free_job()
|
||||||
* will not be called for all jobs still in drm_gpu_scheduler.pending_list.
|
* will not be called for all jobs still in drm_gpu_scheduler.pending_list.
|
||||||
* There is no solution for this currently. Thus, it is up to the driver to make
|
* There is no solution for this currently. Thus, it is up to the driver to make
|
||||||
* sure that
|
* sure that:
|
||||||
|
*
|
||||||
* a) drm_sched_fini() is only called after for all submitted jobs
|
* a) drm_sched_fini() is only called after for all submitted jobs
|
||||||
* drm_sched_backend_ops.free_job() has been called or that
|
* drm_sched_backend_ops.free_job() has been called or that
|
||||||
* b) the jobs for which drm_sched_backend_ops.free_job() has not been called
|
* b) the jobs for which drm_sched_backend_ops.free_job() has not been called
|
||||||
|
@ -120,6 +120,7 @@ config PMAC_MEDIABAY
|
|||||||
config PMAC_BACKLIGHT
|
config PMAC_BACKLIGHT
|
||||||
bool "Backlight control for LCD screens"
|
bool "Backlight control for LCD screens"
|
||||||
depends on PPC_PMAC && ADB_PMU && FB = y && (BROKEN || !PPC64)
|
depends on PPC_PMAC && ADB_PMU && FB = y && (BROKEN || !PPC64)
|
||||||
|
depends on BACKLIGHT_CLASS_DEVICE=y
|
||||||
select FB_BACKLIGHT
|
select FB_BACKLIGHT
|
||||||
help
|
help
|
||||||
Say Y here to enable Macintosh specific extensions of the generic
|
Say Y here to enable Macintosh specific extensions of the generic
|
||||||
|
@ -3,6 +3,7 @@ menuconfig FB_TFT
|
|||||||
tristate "Support for small TFT LCD display modules"
|
tristate "Support for small TFT LCD display modules"
|
||||||
depends on FB && SPI
|
depends on FB && SPI
|
||||||
depends on FB_DEVICE
|
depends on FB_DEVICE
|
||||||
|
depends on BACKLIGHT_CLASS_DEVICE
|
||||||
depends on GPIOLIB || COMPILE_TEST
|
depends on GPIOLIB || COMPILE_TEST
|
||||||
select FB_BACKLIGHT
|
select FB_BACKLIGHT
|
||||||
select FB_SYSMEM_HELPERS_DEFERRED
|
select FB_SYSMEM_HELPERS_DEFERRED
|
||||||
|
@ -649,6 +649,7 @@ config FB_S1D13XXX
|
|||||||
config FB_ATMEL
|
config FB_ATMEL
|
||||||
tristate "AT91 LCD Controller support"
|
tristate "AT91 LCD Controller support"
|
||||||
depends on FB && OF && HAVE_CLK && HAS_IOMEM
|
depends on FB && OF && HAVE_CLK && HAS_IOMEM
|
||||||
|
depends on BACKLIGHT_CLASS_DEVICE
|
||||||
depends on HAVE_FB_ATMEL || COMPILE_TEST
|
depends on HAVE_FB_ATMEL || COMPILE_TEST
|
||||||
select FB_BACKLIGHT
|
select FB_BACKLIGHT
|
||||||
select FB_IOMEM_HELPERS
|
select FB_IOMEM_HELPERS
|
||||||
@ -660,7 +661,6 @@ config FB_ATMEL
|
|||||||
config FB_NVIDIA
|
config FB_NVIDIA
|
||||||
tristate "nVidia Framebuffer Support"
|
tristate "nVidia Framebuffer Support"
|
||||||
depends on FB && PCI
|
depends on FB && PCI
|
||||||
select FB_BACKLIGHT if FB_NVIDIA_BACKLIGHT
|
|
||||||
select FB_CFB_FILLRECT
|
select FB_CFB_FILLRECT
|
||||||
select FB_CFB_COPYAREA
|
select FB_CFB_COPYAREA
|
||||||
select FB_CFB_IMAGEBLIT
|
select FB_CFB_IMAGEBLIT
|
||||||
@ -700,6 +700,8 @@ config FB_NVIDIA_DEBUG
|
|||||||
config FB_NVIDIA_BACKLIGHT
|
config FB_NVIDIA_BACKLIGHT
|
||||||
bool "Support for backlight control"
|
bool "Support for backlight control"
|
||||||
depends on FB_NVIDIA
|
depends on FB_NVIDIA
|
||||||
|
depends on BACKLIGHT_CLASS_DEVICE=y || BACKLIGHT_CLASS_DEVICE=FB_NVIDIA
|
||||||
|
select FB_BACKLIGHT
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
Say Y here if you want to control the backlight of your display.
|
Say Y here if you want to control the backlight of your display.
|
||||||
@ -707,7 +709,6 @@ config FB_NVIDIA_BACKLIGHT
|
|||||||
config FB_RIVA
|
config FB_RIVA
|
||||||
tristate "nVidia Riva support"
|
tristate "nVidia Riva support"
|
||||||
depends on FB && PCI
|
depends on FB && PCI
|
||||||
select FB_BACKLIGHT if FB_RIVA_BACKLIGHT
|
|
||||||
select FB_CFB_FILLRECT
|
select FB_CFB_FILLRECT
|
||||||
select FB_CFB_COPYAREA
|
select FB_CFB_COPYAREA
|
||||||
select FB_CFB_IMAGEBLIT
|
select FB_CFB_IMAGEBLIT
|
||||||
@ -747,6 +748,8 @@ config FB_RIVA_DEBUG
|
|||||||
config FB_RIVA_BACKLIGHT
|
config FB_RIVA_BACKLIGHT
|
||||||
bool "Support for backlight control"
|
bool "Support for backlight control"
|
||||||
depends on FB_RIVA
|
depends on FB_RIVA
|
||||||
|
depends on BACKLIGHT_CLASS_DEVICE=y || BACKLIGHT_CLASS_DEVICE=FB_RIVA
|
||||||
|
select FB_BACKLIGHT
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
Say Y here if you want to control the backlight of your display.
|
Say Y here if you want to control the backlight of your display.
|
||||||
@ -934,7 +937,6 @@ config FB_MATROX_MAVEN
|
|||||||
config FB_RADEON
|
config FB_RADEON
|
||||||
tristate "ATI Radeon display support"
|
tristate "ATI Radeon display support"
|
||||||
depends on FB && PCI
|
depends on FB && PCI
|
||||||
select FB_BACKLIGHT if FB_RADEON_BACKLIGHT
|
|
||||||
select FB_CFB_FILLRECT
|
select FB_CFB_FILLRECT
|
||||||
select FB_CFB_COPYAREA
|
select FB_CFB_COPYAREA
|
||||||
select FB_CFB_IMAGEBLIT
|
select FB_CFB_IMAGEBLIT
|
||||||
@ -960,6 +962,8 @@ config FB_RADEON_I2C
|
|||||||
config FB_RADEON_BACKLIGHT
|
config FB_RADEON_BACKLIGHT
|
||||||
bool "Support for backlight control"
|
bool "Support for backlight control"
|
||||||
depends on FB_RADEON
|
depends on FB_RADEON
|
||||||
|
depends on BACKLIGHT_CLASS_DEVICE=y || BACKLIGHT_CLASS_DEVICE=FB_RADEON
|
||||||
|
select FB_BACKLIGHT
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
Say Y here if you want to control the backlight of your display.
|
Say Y here if you want to control the backlight of your display.
|
||||||
@ -975,7 +979,6 @@ config FB_RADEON_DEBUG
|
|||||||
config FB_ATY128
|
config FB_ATY128
|
||||||
tristate "ATI Rage128 display support"
|
tristate "ATI Rage128 display support"
|
||||||
depends on FB && PCI
|
depends on FB && PCI
|
||||||
select FB_BACKLIGHT if FB_ATY128_BACKLIGHT
|
|
||||||
select FB_IOMEM_HELPERS
|
select FB_IOMEM_HELPERS
|
||||||
select FB_MACMODES if PPC_PMAC
|
select FB_MACMODES if PPC_PMAC
|
||||||
help
|
help
|
||||||
@ -989,6 +992,8 @@ config FB_ATY128
|
|||||||
config FB_ATY128_BACKLIGHT
|
config FB_ATY128_BACKLIGHT
|
||||||
bool "Support for backlight control"
|
bool "Support for backlight control"
|
||||||
depends on FB_ATY128
|
depends on FB_ATY128
|
||||||
|
depends on BACKLIGHT_CLASS_DEVICE=y || BACKLIGHT_CLASS_DEVICE=FB_ATY128
|
||||||
|
select FB_BACKLIGHT
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
Say Y here if you want to control the backlight of your display.
|
Say Y here if you want to control the backlight of your display.
|
||||||
@ -999,7 +1004,6 @@ config FB_ATY
|
|||||||
select FB_CFB_FILLRECT
|
select FB_CFB_FILLRECT
|
||||||
select FB_CFB_COPYAREA
|
select FB_CFB_COPYAREA
|
||||||
select FB_CFB_IMAGEBLIT
|
select FB_CFB_IMAGEBLIT
|
||||||
select FB_BACKLIGHT if FB_ATY_BACKLIGHT
|
|
||||||
select FB_IOMEM_FOPS
|
select FB_IOMEM_FOPS
|
||||||
select FB_MACMODES if PPC
|
select FB_MACMODES if PPC
|
||||||
select FB_ATY_CT if SPARC64 && PCI
|
select FB_ATY_CT if SPARC64 && PCI
|
||||||
@ -1040,6 +1044,8 @@ config FB_ATY_GX
|
|||||||
config FB_ATY_BACKLIGHT
|
config FB_ATY_BACKLIGHT
|
||||||
bool "Support for backlight control"
|
bool "Support for backlight control"
|
||||||
depends on FB_ATY
|
depends on FB_ATY
|
||||||
|
depends on BACKLIGHT_CLASS_DEVICE=y || BACKLIGHT_CLASS_DEVICE=FB_ATY
|
||||||
|
select FB_BACKLIGHT
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
Say Y here if you want to control the backlight of your display.
|
Say Y here if you want to control the backlight of your display.
|
||||||
@ -1528,6 +1534,7 @@ config FB_SH_MOBILE_LCDC
|
|||||||
depends on FB && HAVE_CLK && HAS_IOMEM
|
depends on FB && HAVE_CLK && HAS_IOMEM
|
||||||
depends on SUPERH || COMPILE_TEST
|
depends on SUPERH || COMPILE_TEST
|
||||||
depends on FB_DEVICE
|
depends on FB_DEVICE
|
||||||
|
depends on BACKLIGHT_CLASS_DEVICE
|
||||||
select FB_BACKLIGHT
|
select FB_BACKLIGHT
|
||||||
select FB_DEFERRED_IO
|
select FB_DEFERRED_IO
|
||||||
select FB_DMAMEM_HELPERS
|
select FB_DMAMEM_HELPERS
|
||||||
@ -1793,6 +1800,7 @@ config FB_SSD1307
|
|||||||
tristate "Solomon SSD1307 framebuffer support"
|
tristate "Solomon SSD1307 framebuffer support"
|
||||||
depends on FB && I2C
|
depends on FB && I2C
|
||||||
depends on GPIOLIB || COMPILE_TEST
|
depends on GPIOLIB || COMPILE_TEST
|
||||||
|
depends on BACKLIGHT_CLASS_DEVICE
|
||||||
select FB_BACKLIGHT
|
select FB_BACKLIGHT
|
||||||
select FB_SYSMEM_HELPERS_DEFERRED
|
select FB_SYSMEM_HELPERS_DEFERRED
|
||||||
help
|
help
|
||||||
|
@ -183,9 +183,8 @@ config FB_SYSMEM_HELPERS_DEFERRED
|
|||||||
select FB_SYSMEM_HELPERS
|
select FB_SYSMEM_HELPERS
|
||||||
|
|
||||||
config FB_BACKLIGHT
|
config FB_BACKLIGHT
|
||||||
tristate
|
bool
|
||||||
depends on FB
|
depends on FB
|
||||||
select BACKLIGHT_CLASS_DEVICE
|
|
||||||
|
|
||||||
config FB_MODE_HELPERS
|
config FB_MODE_HELPERS
|
||||||
bool "Enable Video Mode Handling Helpers"
|
bool "Enable Video Mode Handling Helpers"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user