mirror of
https://github.com/archr-linux/Arch-R.git
synced 2026-03-31 14:41:55 -07:00
@@ -3,8 +3,8 @@
|
||||
# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="iwlwifi-firmware"
|
||||
PKG_VERSION="8f2ecadb578d4ceb27cd2b596b1d0d646ba63d2d"
|
||||
PKG_SHA256="e215b997b3dc5a3fad0072133941e3067f0b602b1902345fe298bb119dbda1d7"
|
||||
PKG_VERSION="b33487854c14406a48ab161354f09da9d5d6fad2"
|
||||
PKG_SHA256="83ebb2ef714d80e67bf666500a8bf3a27f92415066dfeb346cdd96725d8f9cad"
|
||||
PKG_LICENSE="Free-to-use"
|
||||
PKG_SITE="https://github.com/LibreELEC/iwlwifi-firmware"
|
||||
PKG_URL="https://github.com/LibreELEC/iwlwifi-firmware/archive/${PKG_VERSION}.tar.gz"
|
||||
|
||||
@@ -29,8 +29,8 @@ case "${LINUX}" in
|
||||
PKG_SOURCE_NAME="linux-${LINUX}-${PKG_VERSION}.tar.gz"
|
||||
;;
|
||||
*)
|
||||
PKG_VERSION="6.6.30"
|
||||
PKG_SHA256="b66a5b863b0f8669448b74ca83bd641a856f164b29956e539bbcb5fdeeab9cc6"
|
||||
PKG_VERSION="6.9.2"
|
||||
PKG_SHA256="d46c5bdf2c5961cc2a4dedefe0434d456865e95e4a7cd9f93fff054f9090e5f9"
|
||||
PKG_URL="https://www.kernel.org/pub/linux/kernel/v${PKG_VERSION/.*/}.x/${PKG_NAME}-${PKG_VERSION}.tar.xz"
|
||||
PKG_PATCH_DIRS="default"
|
||||
;;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,61 +0,0 @@
|
||||
Subject: [PATCH] drm: Call drm_atomic_helper_shutdown() at shutdown time for misc drivers
|
||||
From: Douglas Anderson <dianders@chromium.org>
|
||||
Date: Fri, 01 Sep 2023 16:39:53 -0700
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
Content-Transfer-Encoding: 7bit
|
||||
|
||||
Based on grepping through the source code these drivers appear to be
|
||||
missing a call to drm_atomic_helper_shutdown() at system shutdown
|
||||
time. Among other things, this means that if a panel is in use that it
|
||||
won't be cleanly powered off at system shutdown time.
|
||||
|
||||
The fact that we should call drm_atomic_helper_shutdown() in the case
|
||||
of OS shutdown/restart comes straight out of the kernel doc "driver
|
||||
instance overview" in drm_drv.c.
|
||||
|
||||
All of the drivers in this patch were fairly straightforward to fix
|
||||
since they already had a call to drm_atomic_helper_shutdown() at
|
||||
remove/unbind time but were just lacking one at system shutdown. The
|
||||
only hitch is that some of these drivers use the component model to
|
||||
register/unregister their DRM devices. The shutdown callback is part
|
||||
of the original device. The typical solution here, based on how other
|
||||
DRM drivers do this, is to keep track of whether the device is bound
|
||||
based on drvdata. In most cases the drvdata is the drm_device, so we
|
||||
can just make sure it is NULL when the device is not bound. In some
|
||||
drivers, this required minor code changes. To make things simpler,
|
||||
drm_atomic_helper_shutdown() has been modified to consider a NULL
|
||||
drm_device as a noop in the patch ("drm/atomic-helper:
|
||||
drm_atomic_helper_shutdown(NULL) should be a noop").
|
||||
|
||||
Suggested-by: Maxime Ripard <mripard@kernel.org>
|
||||
Signed-off-by: Douglas Anderson <dianders@chromium.org>
|
||||
Acked-by: Maxime Ripard <mripard@kernel.org>
|
||||
Link: https://lore.kernel.org/r/20230901163944.RFT.2.I9115e5d094a43e687978b0699cc1fe9f2a3452ea@changeid
|
||||
---
|
||||
<snip>
|
||||
diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
|
||||
index 6a8dfc022d3c..35d7a7ffd208 100644
|
||||
--- a/drivers/gpu/drm/sun4i/sun4i_drv.c
|
||||
+++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
|
||||
@@ -413,6 +413,11 @@ static void sun4i_drv_remove(struct platform_device *pdev)
|
||||
component_master_del(&pdev->dev, &sun4i_drv_master_ops);
|
||||
}
|
||||
|
||||
+static void sun4i_drv_shutdown(struct platform_device *pdev)
|
||||
+{
|
||||
+ drm_atomic_helper_shutdown(platform_get_drvdata(pdev));
|
||||
+}
|
||||
+
|
||||
static const struct of_device_id sun4i_drv_of_table[] = {
|
||||
{ .compatible = "allwinner,sun4i-a10-display-engine" },
|
||||
{ .compatible = "allwinner,sun5i-a10s-display-engine" },
|
||||
@@ -437,6 +442,7 @@ MODULE_DEVICE_TABLE(of, sun4i_drv_of_table);
|
||||
static struct platform_driver sun4i_drv_platform_driver = {
|
||||
.probe = sun4i_drv_probe,
|
||||
.remove_new = sun4i_drv_remove,
|
||||
+ .shutdown = sun4i_drv_shutdown,
|
||||
.driver = {
|
||||
.name = "sun4i-drm",
|
||||
.of_match_table = sun4i_drv_of_table,
|
||||
<snip>
|
||||
@@ -848,7 +848,7 @@ Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
+ src_vq->io_modes = VB2_MMAP | VB2_DMABUF;
|
||||
+ src_vq->drv_priv = ctx;
|
||||
+ src_vq->buf_struct_size = sizeof(struct v4l2_m2m_buffer);
|
||||
+ src_vq->min_buffers_needed = 1;
|
||||
+ src_vq->min_queued_buffers = 1;
|
||||
+ src_vq->ops = &deinterlace_qops;
|
||||
+ src_vq->mem_ops = &vb2_dma_contig_memops;
|
||||
+ src_vq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY;
|
||||
@@ -863,7 +863,7 @@ Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
+ dst_vq->io_modes = VB2_MMAP | VB2_DMABUF;
|
||||
+ dst_vq->drv_priv = ctx;
|
||||
+ dst_vq->buf_struct_size = sizeof(struct v4l2_m2m_buffer);
|
||||
+ dst_vq->min_buffers_needed = 2;
|
||||
+ dst_vq->min_queued_buffers = 2;
|
||||
+ dst_vq->ops = &deinterlace_qops;
|
||||
+ dst_vq->mem_ops = &vb2_dma_contig_memops;
|
||||
+ dst_vq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY;
|
||||
|
||||
@@ -61,9 +61,9 @@ index d7c5e9b1a087..9944266c4f58 100644
|
||||
- *pte_addr = sun50i_mk_pte(paddr, prot);
|
||||
- sun50i_table_flush(sun50i_domain, pte_addr, 1);
|
||||
+ sun50i_table_flush(sun50i_domain, &page_table[pte_index], pages);
|
||||
*mapped = size;
|
||||
|
||||
out:
|
||||
return ret;
|
||||
@@ -626,8 +631,10 @@ static size_t sun50i_iommu_unmap(struct iommu_domain *domain, unsigned long iova
|
||||
{
|
||||
struct sun50i_iommu_domain *sun50i_domain = to_sun50i_domain(domain);
|
||||
@@ -97,11 +97,11 @@ index d7c5e9b1a087..9944266c4f58 100644
|
||||
|
||||
static phys_addr_t sun50i_iommu_iova_to_phys(struct iommu_domain *domain,
|
||||
@@ -828,7 +836,7 @@ static int sun50i_iommu_of_xlate(struct device *dev,
|
||||
}
|
||||
|
||||
static const struct iommu_ops sun50i_iommu_ops = {
|
||||
.identity_domain = &sun50i_iommu_identity_domain,
|
||||
- .pgsize_bitmap = SZ_4K,
|
||||
+ .pgsize_bitmap = 0x1ff000,
|
||||
.device_group = sun50i_iommu_device_group,
|
||||
.domain_alloc = sun50i_iommu_domain_alloc,
|
||||
.device_group = generic_single_device_group,
|
||||
.domain_alloc_paging = sun50i_iommu_domain_alloc_paging,
|
||||
.of_xlate = sun50i_iommu_of_xlate,
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
From 667a93ec571a2a8f2487c258c928936d73b7fa14 Mon Sep 17 00:00:00 2001
|
||||
From: Jernej Skrabec <jernej.skrabec@gmail.com>
|
||||
Date: Sun, 19 Feb 2023 13:02:31 +0100
|
||||
Subject: [PATCH] ARM: dts: sun8i-r40: Add interconnect to video-codec
|
||||
|
||||
Video codec needs interconnect, so driver knows that it needs to adjust
|
||||
DMA addresses.
|
||||
|
||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com>
|
||||
---
|
||||
arch/arm/boot/dts/allwinner/sun8i-r40.dtsi | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/allwinner/sun8i-r40.dtsi b/arch/arm/boot/dts/allwinner/sun8i-r40.dtsi
|
||||
index 4ef26d8f5340..a5b1f1e3900d 100644
|
||||
--- a/arch/arm/boot/dts/allwinner/sun8i-r40.dtsi
|
||||
+++ b/arch/arm/boot/dts/allwinner/sun8i-r40.dtsi
|
||||
@@ -338,6 +338,8 @@ video-codec@1c0e000 {
|
||||
resets = <&ccu RST_BUS_VE>;
|
||||
interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
|
||||
allwinner,sram = <&ve_sram 1>;
|
||||
+ interconnects = <&mbus 4>;
|
||||
+ interconnect-names = "dma-mem";
|
||||
};
|
||||
|
||||
mmc0: mmc@1c0f000 {
|
||||
--
|
||||
2.39.2
|
||||
|
||||
@@ -21,12 +21,13 @@ diff --git a/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c b/drivers/gpu/drm/sun4i/sun8i
|
||||
index 8f8d3bdba5ce..93831cdf1917 100644
|
||||
--- a/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c
|
||||
+++ b/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c
|
||||
@@ -8,14 +8,82 @@
|
||||
@@ -8,14 +8,90 @@
|
||||
#include <linux/of.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
+#include <drm/drm_atomic_state_helper.h>
|
||||
+#include <drm/drm_bridge_connector.h>
|
||||
+#include <drm/drm_edid.h>
|
||||
#include <drm/drm_managed.h>
|
||||
#include <drm/drm_modeset_helper_vtables.h>
|
||||
#include <drm/drm_of.h>
|
||||
@@ -61,16 +62,23 @@ index 8f8d3bdba5ce..93831cdf1917 100644
|
||||
+ enum drm_connector_status status)
|
||||
+{
|
||||
+ struct sun8i_dw_hdmi *hdmi = bridge_to_sun8i_dw_hdmi(bridge);
|
||||
+ struct edid *edid;
|
||||
+
|
||||
+ if (!hdmi->cec_notifier)
|
||||
+ return;
|
||||
+
|
||||
+ if (status == connector_status_connected) {
|
||||
+ edid = drm_bridge_get_edid(hdmi->hdmi_bridge, hdmi->connector);
|
||||
+ if (edid)
|
||||
+ cec_notifier_set_phys_addr_from_edid(hdmi->cec_notifier,
|
||||
+ edid);
|
||||
+ const struct drm_edid *drm_edid;
|
||||
+ const struct edid *edid;
|
||||
+
|
||||
+ drm_edid = drm_bridge_edid_read(hdmi->hdmi_bridge,
|
||||
+ hdmi->connector);
|
||||
+ if (drm_edid)
|
||||
+ return;
|
||||
+
|
||||
+ edid = drm_edid_raw(drm_edid);
|
||||
+ cec_notifier_set_phys_addr_from_edid(hdmi->cec_notifier,
|
||||
+ edid);
|
||||
+ drm_edid_free(drm_edid);
|
||||
+ } else {
|
||||
+ cec_notifier_phys_addr_invalidate(hdmi->cec_notifier);
|
||||
+ }
|
||||
|
||||
@@ -538,7 +538,7 @@ diff --git a/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c b/drivers/gpu/drm/sun4i/sun8i
|
||||
index 22e084989ee6..0837e2576556 100644
|
||||
--- a/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c
|
||||
+++ b/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c
|
||||
@@ -7,18 +7,25 @@
|
||||
@@ -7,19 +7,26 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/platform_device.h>
|
||||
@@ -546,6 +546,7 @@ index 22e084989ee6..0837e2576556 100644
|
||||
|
||||
#include <drm/drm_atomic_state_helper.h>
|
||||
#include <drm/drm_bridge_connector.h>
|
||||
#include <drm/drm_edid.h>
|
||||
#include <drm/drm_managed.h>
|
||||
#include <drm/drm_modeset_helper_vtables.h>
|
||||
#include <drm/drm_of.h>
|
||||
|
||||
@@ -17,9 +17,9 @@ index f4d9d6279094..1e07066fa129 100644
|
||||
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
|
||||
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
|
||||
@@ -1510,6 +1510,8 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
|
||||
case V4L2_PIX_FMT_AV1_FRAME: descr = "AV1 Frame"; break;
|
||||
case V4L2_PIX_FMT_MT2110T: descr = "Mediatek 10bit Tile Mode"; break;
|
||||
case V4L2_PIX_FMT_MT2110R: descr = "Mediatek 10bit Raster Mode"; break;
|
||||
case V4L2_PIX_FMT_HEXTILE: descr = "Hextile Compressed Format"; break;
|
||||
+ case V4L2_PIX_FMT_YUV420_8_AFBC_16X16_SPLIT: descr = "YUV 4:2:0 (AFBC 16x16)"; break;
|
||||
+ case V4L2_PIX_FMT_YUV420_10_AFBC_16X16_SPLIT: descr = "10-bit YUV 4:2:0 (AFBC 16x16)"; break;
|
||||
default:
|
||||
|
||||
@@ -1,66 +0,0 @@
|
||||
From edfe1a6c99aff85e97dc1600355a66bbcb417531 Mon Sep 17 00:00:00 2001
|
||||
From: Jernej Skrabec <jernej.skrabec@gmail.com>
|
||||
Date: Thu, 12 Oct 2023 20:25:42 +0200
|
||||
Subject: [PATCH 22/25] clk: sunxi-ng: h6: Reparent CPUX during PLL CPUX rate
|
||||
change
|
||||
|
||||
While PLL CPUX clock rate change when CPU is running from it works in
|
||||
vast majority of cases, now and then it causes instability. This leads
|
||||
to system crashes and other undefined behaviour. After a lot of testing
|
||||
(30+ hours) while also doing a lot of frequency switches, we can't
|
||||
observe any instability issues anymore when doing reparenting to stable
|
||||
clock like 24 MHz oscillator.
|
||||
|
||||
Fixes: 524353ea480b ("clk: sunxi-ng: add support for the Allwinner H6 CCU")
|
||||
Link: https://forum.libreelec.tv/thread/27295-orange-pi-3-lts-freezes/
|
||||
Reported-by: Chad Wagner <wagnerch42@gmail.com>
|
||||
Tested-by: Chad Wagner <wagnerch42@gmail.com>
|
||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com>
|
||||
---
|
||||
drivers/clk/sunxi-ng/ccu-sun50i-h6.c | 19 +++++++++++++++++--
|
||||
1 file changed, 17 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/clk/sunxi-ng/ccu-sun50i-h6.c b/drivers/clk/sunxi-ng/ccu-sun50i-h6.c
|
||||
index 42568c616181..892df807275c 100644
|
||||
--- a/drivers/clk/sunxi-ng/ccu-sun50i-h6.c
|
||||
+++ b/drivers/clk/sunxi-ng/ccu-sun50i-h6.c
|
||||
@@ -1181,11 +1181,18 @@ static const u32 usb2_clk_regs[] = {
|
||||
SUN50I_H6_USB3_CLK_REG,
|
||||
};
|
||||
|
||||
+static struct ccu_mux_nb sun50i_h6_cpu_nb = {
|
||||
+ .common = &cpux_clk.common,
|
||||
+ .cm = &cpux_clk.mux,
|
||||
+ .delay_us = 1,
|
||||
+ .bypass_index = 0, /* index of 24 MHz oscillator */
|
||||
+};
|
||||
+
|
||||
static int sun50i_h6_ccu_probe(struct platform_device *pdev)
|
||||
{
|
||||
void __iomem *reg;
|
||||
+ int i, ret;
|
||||
u32 val;
|
||||
- int i;
|
||||
|
||||
reg = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(reg))
|
||||
@@ -1252,7 +1259,15 @@ static int sun50i_h6_ccu_probe(struct platform_device *pdev)
|
||||
val |= BIT(24);
|
||||
writel(val, reg + SUN50I_H6_HDMI_CEC_CLK_REG);
|
||||
|
||||
- return devm_sunxi_ccu_probe(&pdev->dev, reg, &sun50i_h6_ccu_desc);
|
||||
+ ret = devm_sunxi_ccu_probe(&pdev->dev, reg, &sun50i_h6_ccu_desc);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ /* Reparent CPU during PLL CPUX rate changes */
|
||||
+ ccu_mux_notifier_register(pll_cpux_clk.common.hw.clk,
|
||||
+ &sun50i_h6_cpu_nb);
|
||||
+
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id sun50i_h6_ccu_ids[] = {
|
||||
--
|
||||
2.42.0
|
||||
|
||||
@@ -10,9 +10,9 @@ diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
|
||||
index 1e70d8c67653..6ae1c5fa19f9 100644
|
||||
--- a/drivers/video/fbdev/core/fbmem.c
|
||||
+++ b/drivers/video/fbdev/core/fbmem.c
|
||||
@@ -51,10 +51,10 @@
|
||||
static DEFINE_MUTEX(registration_lock);
|
||||
@@ -30,10 +30,10 @@
|
||||
|
||||
DEFINE_MUTEX(registration_lock);
|
||||
struct fb_info *registered_fb[FB_MAX] __read_mostly;
|
||||
+EXPORT_SYMBOL(registered_fb);
|
||||
+
|
||||
@@ -22,21 +22,19 @@ index 1e70d8c67653..6ae1c5fa19f9 100644
|
||||
- if (!registered_fb[i]) {} else
|
||||
+EXPORT_SYMBOL(num_registered_fb);
|
||||
|
||||
bool fb_center_logo __read_mostly;
|
||||
|
||||
struct fb_info *get_fb_info(unsigned int idx)
|
||||
{
|
||||
diff --git a/include/linux/fb.h b/include/linux/fb.h
|
||||
index 0aff76bcbb00..453c3b2b6b8e 100644
|
||||
--- a/include/linux/fb.h
|
||||
+++ b/include/linux/fb.h
|
||||
@@ -627,10 +627,16 @@ extern int fb_get_color_depth(struct fb_var_screeninfo *var,
|
||||
@@ -610,6 +610,13 @@ extern int fb_get_color_depth(struct fb_var_screeninfo *var,
|
||||
extern int fb_get_options(const char *name, char **option);
|
||||
extern int fb_new_modelist(struct fb_info *info);
|
||||
|
||||
+extern struct fb_info *registered_fb[FB_MAX];
|
||||
+extern int num_registered_fb;
|
||||
extern bool fb_center_logo;
|
||||
extern int fb_logo_count;
|
||||
|
||||
+
|
||||
+#define for_each_registered_fb(i) \
|
||||
+ for (i = 0; i < FB_MAX; i++) \
|
||||
+ if (!registered_fb[i]) {} else
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -3667,12 +3667,11 @@ diff --git a/drivers/gpu/drm/rockchip/cdn-dp-core.c b/drivers/gpu/drm/rockchip/c
|
||||
index a4a45daf93f2..058bc372f02b 100644
|
||||
--- a/drivers/gpu/drm/rockchip/cdn-dp-core.c
|
||||
+++ b/drivers/gpu/drm/rockchip/cdn-dp-core.c
|
||||
@@ -23,11 +23,10 @@
|
||||
@@ -23,10 +23,9 @@
|
||||
#include <drm/drm_simple_kms_helper.h>
|
||||
|
||||
#include "cdn-dp-core.h"
|
||||
-#include "cdn-dp-reg.h"
|
||||
#include "rockchip_drm_vop.h"
|
||||
|
||||
static inline struct cdn_dp_device *connector_to_dp(struct drm_connector *connector)
|
||||
{
|
||||
|
||||
@@ -16,15 +16,15 @@ diff --git a/drivers/gpu/drm/imx/dcss/dcss-drv.c b/drivers/gpu/drm/imx/dcss/dcss
|
||||
index 8dc2f85c514b..09d0ac28e28a 100644
|
||||
--- a/drivers/gpu/drm/imx/dcss/dcss-drv.c
|
||||
+++ b/drivers/gpu/drm/imx/dcss/dcss-drv.c
|
||||
@@ -6,6 +6,7 @@
|
||||
#include <linux/kernel.h>
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <linux/of.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <drm/drm_module.h>
|
||||
+#include <linux/component.h>
|
||||
#include <drm/drm_of.h>
|
||||
|
||||
#include "dcss-dev.h"
|
||||
@@ -14,6 +15,8 @@
|
||||
@@ -16,6 +17,8 @@
|
||||
struct dcss_drv {
|
||||
struct dcss_dev *dcss;
|
||||
struct dcss_kms_dev *kms;
|
||||
@@ -33,7 +33,7 @@ index 8dc2f85c514b..09d0ac28e28a 100644
|
||||
};
|
||||
|
||||
struct dcss_dev *dcss_drv_dev_to_dcss(struct device *dev)
|
||||
@@ -30,30 +33,18 @@ struct drm_device *dcss_drv_dev_to_drm(struct device *dev)
|
||||
@@ -32,30 +35,18 @@ struct drm_device *dcss_drv_dev_to_drm(struct device *dev)
|
||||
return mdrv ? &mdrv->kms->base : NULL;
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ index 8dc2f85c514b..09d0ac28e28a 100644
|
||||
-
|
||||
- of_node_put(remote);
|
||||
|
||||
mdrv = kzalloc(sizeof(*mdrv), GFP_KERNEL);
|
||||
mdrv = devm_kzalloc(dev, sizeof(*mdrv), GFP_KERNEL);
|
||||
if (!mdrv)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -65,9 +65,9 @@ index 8dc2f85c514b..09d0ac28e28a 100644
|
||||
+ mdrv->is_componentized = componentized;
|
||||
+
|
||||
+ mdrv->dcss = dcss_dev_create(dev, componentized);
|
||||
if (IS_ERR(mdrv->dcss)) {
|
||||
err = PTR_ERR(mdrv->dcss);
|
||||
goto err;
|
||||
if (IS_ERR(mdrv->dcss))
|
||||
return PTR_ERR(mdrv->dcss);
|
||||
|
||||
@@ -61,7 +52,7 @@ static int dcss_drv_platform_probe(struct platform_device *pdev)
|
||||
|
||||
dev_set_drvdata(dev, mdrv);
|
||||
@@ -76,12 +76,12 @@ index 8dc2f85c514b..09d0ac28e28a 100644
|
||||
+ mdrv->kms = dcss_kms_attach(mdrv->dcss, componentized);
|
||||
if (IS_ERR(mdrv->kms)) {
|
||||
err = PTR_ERR(mdrv->kms);
|
||||
goto dcss_shutoff;
|
||||
@@ -79,14 +70,68 @@ static int dcss_drv_platform_probe(struct platform_device *pdev)
|
||||
dev_err_probe(dev, err, "Failed to initialize KMS\n");
|
||||
@@ -76,12 +67,66 @@ static int dcss_drv_platform_probe(struct platform_device *pdev)
|
||||
return err;
|
||||
}
|
||||
|
||||
-static int dcss_drv_platform_remove(struct platform_device *pdev)
|
||||
-static void dcss_drv_platform_remove(struct platform_device *pdev)
|
||||
+static void dcss_drv_deinit(struct device *dev, bool componentized)
|
||||
{
|
||||
- struct dcss_drv *mdrv = dev_get_drvdata(&pdev->dev);
|
||||
@@ -90,8 +90,6 @@ index 8dc2f85c514b..09d0ac28e28a 100644
|
||||
- dcss_kms_detach(mdrv->kms);
|
||||
+ dcss_kms_detach(mdrv->kms, componentized);
|
||||
dcss_dev_destroy(mdrv->dcss);
|
||||
|
||||
kfree(mdrv);
|
||||
+}
|
||||
+
|
||||
+static int dcss_drv_bind(struct device *dev)
|
||||
@@ -138,7 +136,7 @@ index 8dc2f85c514b..09d0ac28e28a 100644
|
||||
+ return component_master_add_with_match(dev, &dcss_master_ops, match);
|
||||
+}
|
||||
+
|
||||
+static int dcss_drv_platform_remove(struct platform_device *pdev)
|
||||
+static void dcss_drv_platform_remove(struct platform_device *pdev)
|
||||
+{
|
||||
+ struct dcss_drv *mdrv = dev_get_drvdata(&pdev->dev);
|
||||
+
|
||||
@@ -146,9 +144,9 @@ index 8dc2f85c514b..09d0ac28e28a 100644
|
||||
+ component_master_del(&pdev->dev, &dcss_master_ops);
|
||||
+ else
|
||||
+ dcss_drv_deinit(&pdev->dev, false);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void dcss_drv_platform_shutdown(struct platform_device *pdev)
|
||||
diff --git a/drivers/gpu/drm/imx/dcss/dcss-kms.c b/drivers/gpu/drm/imx/dcss/dcss-kms.c
|
||||
index 135a62366ab8..cafb09df6c75 100644
|
||||
--- a/drivers/gpu/drm/imx/dcss/dcss-kms.c
|
||||
@@ -222,9 +220,9 @@ index dfe5dd99eea3..e98d9c587a43 100644
|
||||
-void dcss_kms_detach(struct dcss_kms_dev *kms);
|
||||
+struct dcss_kms_dev *dcss_kms_attach(struct dcss_dev *dcss, bool componentized);
|
||||
+void dcss_kms_detach(struct dcss_kms_dev *kms, bool componentized);
|
||||
void dcss_kms_shutdown(struct dcss_kms_dev *kms);
|
||||
int dcss_crtc_init(struct dcss_crtc *crtc, struct drm_device *drm);
|
||||
void dcss_crtc_deinit(struct dcss_crtc *crtc, struct drm_device *drm);
|
||||
struct dcss_plane *dcss_plane_init(struct drm_device *drm,
|
||||
--
|
||||
2.29.2
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user