53dbee4926
UAPI Changes: - Fix invalid IN_FORMATS blob when plane->format_mod_supported is NULL. Cross-subsystem Changes: - Assorted dt bindings updates. - Fix vga16fb vga checking on x86. - Fix extra semicolon in rwsem.h's _down_write_nest_lock. - Assorted small fixes to agp and fbdev drivers. - Fix oops in creating a udmabuf with 0 pages. - Hot-unplug firmware fb devices on forced removal - Reqquest memory region in simplefb and simpledrm, and don't make the ioresource as busy. Core Changes: - Mock a drm_plane in drm-plane-helper selftest. - Assorted bug fixes to device logging, dbi. - Use DP helper for sink count in mst. - Assorted documentation fixes. - Assorted small fixes. - Move DP headers to drm/dp, and add a drm dp helper module. - Move the buddy allocator from i915 to common drm. - Add simple pci and platform module init macros to remove a lot of boilerplate from some drivers. - Support microsoft extension for HMDs and specialized monitors. - Improve edid parser's deep color handling. - Add type 7 timing support to edid parser. - Add a weak backpointer to the ttm_bo from ttm_resource - Add 3 eDP panels. Driver Changes: - Add support for HDMI and JZ4780 to ingenic. - Add support for higher DP/eDP bitrates to nouveau. - Assorted driver fixes to tilcdc, vmwgfx, sn65dsi83, meson, stm, panfrost, v3d, gma500, vc4, virtio, mgag200, ast, radeon, amdgpu, nouveau, various bridge drivers. - Convert and revert exynos dsi support to bridge driver. - Add vcc supply regulator support for sn65dsi83. - More conversion of bridge/chipone-icn6211 to atomic. - Remove conflicting fb's from stm, and add support for new hw version. - Add device link in parade-ps8640 to fix suspend/resume. - Update Boe-tv110c9m init sequence. - Add wide screen support to AST2600. - Fix omapdrm implicit dma_buf fencing. - Add support for multiple overlay planes to vkms. - Convert bridge/anx7625 to atomic, add HDCP support, add eld support for audio, and fix HPD. - Add driver for ChromeOS privacy screen. - Handover display from firmware to vc4 more gracefully, and support nomodeset. - Add flexible and ycbcr pixel formats to stm/ltdc. - Convert exynos mipi dsi to atomic. - Add initial dual core group GPUs support to panfrost. - No longer add exclusive fence in amdgpu as shared fence. - Add CSC and full range supoprt to vc4. - Shutdown the display on system shutdown and unbind. - Add Multi-Inno Technology MI0700S4T-6 simple panel. -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEuXvWqAysSYEJGuVH/lWMcqZwE8MFAmHyiHMACgkQ/lWMcqZw E8OLfQ//Xd1njt93nRGoQofuQkz23n2AUTAnmbwzQKcvmat8ugXbRJ5JaVQJrFpu OQEYM46eZIyu2LekMiz4HgPK8CjS156QJ1WtltUFglOY1KLejb6HF5boBYxLkIC7 wLhkaRiwed4t7WOTrftgzpH5FNj/7Vi+Hav9l8rYRC74sWanEZNGBJL2OD9GRdlU 3tlmY8oXVAN8YDD/43Cv+foOTzLS/COI7JCFgFRhfzoFss3EVR061u55uOq18STB UI29NusqX7/K6hQAWCKl0EQBEZWMR02/dgu3ZpOEHHAa96RgHxIuRYsIO9kvGgiF VyW0EW6AyD/KsOSBYnsfUqkFfNchx9Xb8ZDjIhHUYxPsxe4iUJneCrdIKEmLWgSd 1bVNrltLJKBQARW4Whpy/gaiKV8RD8YVJobA/+/COeCUXCnNAT43O9aJmix/7253 Q7ORXTss5WRpuYswMWmObebf8p3IhFjTvlzzenXynl7mkaohGzHPf6SUSUZbJ8Df PZCh17McwIEQ1BtYeegeAGM6s8lrv5+yZaY4bnkQsJNOHeab0cPqmQ8/s+hUeRtp 3VDRVhkgzz2XuTaiKia0gWcAQbdZ2KornkP4QMyDH7w0+6bsuJnNXe4L1XY9lt4J 5v411FaD61FbGDhu5PFtYI7+ZlgM0h5sqlhVkUEzbckzTF3SC9c= =IMtm -----END PGP SIGNATURE----- Merge tag 'drm-misc-next-2022-01-27' of git://anongit.freedesktop.org/drm/drm-misc into drm-next [airlied: add two missing Kconfig] drm-misc-next for v5.18: UAPI Changes: - Fix invalid IN_FORMATS blob when plane->format_mod_supported is NULL. Cross-subsystem Changes: - Assorted dt bindings updates. - Fix vga16fb vga checking on x86. - Fix extra semicolon in rwsem.h's _down_write_nest_lock. - Assorted small fixes to agp and fbdev drivers. - Fix oops in creating a udmabuf with 0 pages. - Hot-unplug firmware fb devices on forced removal - Reqquest memory region in simplefb and simpledrm, and don't make the ioresource as busy. Core Changes: - Mock a drm_plane in drm-plane-helper selftest. - Assorted bug fixes to device logging, dbi. - Use DP helper for sink count in mst. - Assorted documentation fixes. - Assorted small fixes. - Move DP headers to drm/dp, and add a drm dp helper module. - Move the buddy allocator from i915 to common drm. - Add simple pci and platform module init macros to remove a lot of boilerplate from some drivers. - Support microsoft extension for HMDs and specialized monitors. - Improve edid parser's deep color handling. - Add type 7 timing support to edid parser. - Add a weak backpointer to the ttm_bo from ttm_resource - Add 3 eDP panels. Driver Changes: - Add support for HDMI and JZ4780 to ingenic. - Add support for higher DP/eDP bitrates to nouveau. - Assorted driver fixes to tilcdc, vmwgfx, sn65dsi83, meson, stm, panfrost, v3d, gma500, vc4, virtio, mgag200, ast, radeon, amdgpu, nouveau, various bridge drivers. - Convert and revert exynos dsi support to bridge driver. - Add vcc supply regulator support for sn65dsi83. - More conversion of bridge/chipone-icn6211 to atomic. - Remove conflicting fb's from stm, and add support for new hw version. - Add device link in parade-ps8640 to fix suspend/resume. - Update Boe-tv110c9m init sequence. - Add wide screen support to AST2600. - Fix omapdrm implicit dma_buf fencing. - Add support for multiple overlay planes to vkms. - Convert bridge/anx7625 to atomic, add HDCP support, add eld support for audio, and fix HPD. - Add driver for ChromeOS privacy screen. - Handover display from firmware to vc4 more gracefully, and support nomodeset. - Add flexible and ycbcr pixel formats to stm/ltdc. - Convert exynos mipi dsi to atomic. - Add initial dual core group GPUs support to panfrost. - No longer add exclusive fence in amdgpu as shared fence. - Add CSC and full range supoprt to vc4. - Shutdown the display on system shutdown and unbind. - Add Multi-Inno Technology MI0700S4T-6 simple panel. Signed-off-by: Dave Airlie <airlied@redhat.com> From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/456a23c6-7324-7543-0c45-751f30ef83f7@linux.intel.com
107 lines
2.4 KiB
C
107 lines
2.4 KiB
C
// SPDX-License-Identifier: MIT
|
|
/*
|
|
* Copyright (C) 2020 Red Hat, Inc.
|
|
*
|
|
* Authors:
|
|
* Hans de Goede <hdegoede@redhat.com>
|
|
*/
|
|
|
|
#include <linux/acpi.h>
|
|
#include <drm/drm_privacy_screen_machine.h>
|
|
|
|
#ifdef CONFIG_X86
|
|
static struct drm_privacy_screen_lookup arch_lookup;
|
|
|
|
struct arch_init_data {
|
|
struct drm_privacy_screen_lookup lookup;
|
|
bool (*detect)(void);
|
|
};
|
|
|
|
#if IS_ENABLED(CONFIG_THINKPAD_ACPI)
|
|
static acpi_status __init acpi_set_handle(acpi_handle handle, u32 level,
|
|
void *context, void **return_value)
|
|
{
|
|
*(acpi_handle *)return_value = handle;
|
|
return AE_CTRL_TERMINATE;
|
|
}
|
|
|
|
static bool __init detect_thinkpad_privacy_screen(void)
|
|
{
|
|
union acpi_object obj = { .type = ACPI_TYPE_INTEGER };
|
|
struct acpi_object_list args = { .count = 1, .pointer = &obj, };
|
|
acpi_handle ec_handle = NULL;
|
|
unsigned long long output;
|
|
acpi_status status;
|
|
|
|
if (acpi_disabled)
|
|
return false;
|
|
|
|
/* Get embedded-controller handle */
|
|
status = acpi_get_devices("PNP0C09", acpi_set_handle, NULL, &ec_handle);
|
|
if (ACPI_FAILURE(status) || !ec_handle)
|
|
return false;
|
|
|
|
/* And call the privacy-screen get-status method */
|
|
status = acpi_evaluate_integer(ec_handle, "HKEY.GSSS", &args, &output);
|
|
if (ACPI_FAILURE(status))
|
|
return false;
|
|
|
|
return (output & 0x10000) ? true : false;
|
|
}
|
|
#endif
|
|
|
|
#if IS_ENABLED(CONFIG_CHROMEOS_PRIVACY_SCREEN)
|
|
static bool __init detect_chromeos_privacy_screen(void)
|
|
{
|
|
return acpi_dev_present("GOOG0010", NULL, -1);
|
|
}
|
|
#endif
|
|
|
|
static const struct arch_init_data arch_init_data[] __initconst = {
|
|
#if IS_ENABLED(CONFIG_THINKPAD_ACPI)
|
|
{
|
|
.lookup = {
|
|
.dev_id = NULL,
|
|
.con_id = NULL,
|
|
.provider = "privacy_screen-thinkpad_acpi",
|
|
},
|
|
.detect = detect_thinkpad_privacy_screen,
|
|
},
|
|
#endif
|
|
#if IS_ENABLED(CONFIG_CHROMEOS_PRIVACY_SCREEN)
|
|
{
|
|
.lookup = {
|
|
.dev_id = NULL,
|
|
.con_id = NULL,
|
|
.provider = "privacy_screen-GOOG0010:00",
|
|
},
|
|
.detect = detect_chromeos_privacy_screen,
|
|
},
|
|
#endif
|
|
};
|
|
|
|
void __init drm_privacy_screen_lookup_init(void)
|
|
{
|
|
int i;
|
|
|
|
for (i = 0; i < ARRAY_SIZE(arch_init_data); i++) {
|
|
if (!arch_init_data[i].detect())
|
|
continue;
|
|
|
|
pr_info("Found '%s' privacy-screen provider\n",
|
|
arch_init_data[i].lookup.provider);
|
|
|
|
/* Make a copy because arch_init_data is __initconst */
|
|
arch_lookup = arch_init_data[i].lookup;
|
|
drm_privacy_screen_lookup_add(&arch_lookup);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void drm_privacy_screen_lookup_exit(void)
|
|
{
|
|
if (arch_lookup.provider)
|
|
drm_privacy_screen_lookup_remove(&arch_lookup);
|
|
}
|
|
#endif /* ifdef CONFIG_X86 */
|