From: Alexey Sheplyakov <asheplyakov@basealt.ru> To: devel-kernel@lists.altlinux.org Cc: rst@basealt.ru, nir@basealt.ru, sin@basealt.ru Subject: [d-kernel] [PATCH vtry2 5/7] drm/bridge: dw-hdmi: refreshed hw revision 0x2a support patch Date: Fri, 2 Sep 2022 11:33:42 +0400 Message-ID: <20220902073344.8310-6-asheplyakov@basealt.ru> (raw) In-Reply-To: <20220902073344.8310-1-asheplyakov@basealt.ru> The hardware needs non-zero register shift (from DTB), and a special conf0 parameter. With this patch I can use HDMI audio on Baikal-M SoC. Signed-off-by: Alexey Sheplyakov <asheplyakov@basealt.ru> --- .../display/bridge/synopsys,dw-hdmi.yaml | 7 +++++++ .../drm/bridge/synopsys/dw-hdmi-ahb-audio.c | 18 +++++++++--------- .../gpu/drm/bridge/synopsys/dw-hdmi-audio.h | 2 +- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 12 ++++++++---- 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/Documentation/devicetree/bindings/display/bridge/synopsys,dw-hdmi.yaml b/Documentation/devicetree/bindings/display/bridge/synopsys,dw-hdmi.yaml index 9be44a682e67..b86365ebb650 100644 --- a/Documentation/devicetree/bindings/display/bridge/synopsys,dw-hdmi.yaml +++ b/Documentation/devicetree/bindings/display/bridge/synopsys,dw-hdmi.yaml @@ -31,6 +31,13 @@ properties: - enum: [1, 4] default: 1 + ahb-audio-regshift: + description: + AHB audio registers offset shift + $ref: /schemas/types.yaml#/definitions/uint32 + enum: [0, 2] + default: 0 + clocks: minItems: 2 maxItems: 5 diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-ahb-audio.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-ahb-audio.c index 8ea999aac4bf..9faae3604c2e 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-ahb-audio.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-ahb-audio.c @@ -135,24 +135,24 @@ struct snd_dw_hdmi { static inline void dw_hdmi_writeb_relaxed(u8 value, const struct dw_hdmi_audio_data *data, int offset) { void __iomem *base = data->base; - if (data->reg_offset != 0) - offset <<= data->reg_offset; + if (data->regshift != 0) + offset <<= data->regshift; writeb_relaxed(value, base + offset); } static inline void dw_hdmi_writeb(u8 value, const struct dw_hdmi_audio_data *data, int offset) { void __iomem *base = data->base; - if (data->reg_offset != 0) - offset <<= data->reg_offset; + if (data->regshift != 0) + offset <<= data->regshift; writeb(value, base + offset); } static inline u8 dw_hdmi_readb(const struct dw_hdmi_audio_data *data, int offset) { void __iomem *base = data->base; - if (data->reg_offset != 0) - offset <<= data->reg_offset; + if (data->regshift != 0) + offset <<= data->regshift; return readb(base + offset); } @@ -160,8 +160,8 @@ static inline u8 dw_hdmi_readb(const struct dw_hdmi_audio_data *data, int offset static inline u8 dw_hdmi_readb_relaxed(const struct dw_hdmi_audio_data *data, int offset) { void __iomem *base = data->base; - if (data->reg_offset != 0) - offset <<= data->reg_offset; + if (data->regshift != 0) + offset <<= data->regshift; return readb_relaxed(base + offset); } @@ -451,7 +451,7 @@ static int dw_hdmi_prepare(struct snd_pcm_substream *substream) HDMI_AHB_DMA_CONF0_INCR8; threshold = 128; break; - case 0x2a: /* this revision is used in Baikal-M SoC */ + case 0x2a: conf0 = HDMI_AHB_DMA_CONF0_BURST_MODE | HDMI_AHB_DMA_CONF0_INCR16; threshold = 128; diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-audio.h b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-audio.h index bc8468fe52a0..3250588d39ff 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-audio.h +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-audio.h @@ -10,7 +10,7 @@ struct dw_hdmi_audio_data { int irq; struct dw_hdmi *hdmi; u8 *(*get_eld)(struct dw_hdmi *hdmi); - unsigned reg_offset; + unsigned regshift; }; struct dw_hdmi_i2s_audio_data { diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c index 573c9820030e..0472ab97ea39 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -3441,11 +3441,15 @@ struct dw_hdmi *dw_hdmi_probe(struct platform_device *pdev, audio.irq = irq; audio.hdmi = hdmi; audio.get_eld = hdmi_audio_get_eld; - audio.reg_offset = 0; + if (of_property_read_u32(np, "ahb-audio-regshift", &audio.regshift) != 0) { + audio.regshift = 0; + } else { + dev_dbg(dev, "set audio.regshift=%u from DTB\n", audio.regshift); + } if (of_device_is_compatible(np, "baikal,hdmi")) { - audio.reg_offset = 2; - dev_info(dev, "setting audio.reg_offset=%d for BE-M1000 SoC\n", - audio.reg_offset); + audio.regshift = 2; + dev_info(dev, "setting audio.regshift=%d for BE-M1000 SoC\n", + audio.regshift); } hdmi->enable_audio = dw_hdmi_ahb_audio_enable; hdmi->disable_audio = dw_hdmi_ahb_audio_disable; -- 2.33.3
next prev parent reply other threads:[~2022-09-02 7:33 UTC|newest] Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-09-02 7:33 [d-kernel] (try2) sisyphus/std-def: Байкал-М: поддержка SDK-M 5.5, ноутбука Элпитех Alexey Sheplyakov 2022-09-02 7:33 ` [d-kernel] [PATCH vtry2 1/7] arm64: dts: wiped out obsolete Baikal-M device trees Alexey Sheplyakov 2022-09-02 7:33 ` [d-kernel] [PATCH vtry2 2/7] net: stmmac: removed obsolete Baikal-M specific mdio reset Alexey Sheplyakov 2022-09-02 7:33 ` [d-kernel] [PATCH vtry2 3/7] Added PCI-E driver for Baikal-M with SDK-M 5.5 firmware Alexey Sheplyakov 2022-09-02 7:33 ` [d-kernel] [PATCH vtry2 4/7] input: new driver - serdev-serio Alexey Sheplyakov 2022-09-02 7:33 ` Alexey Sheplyakov [this message] 2022-09-02 7:33 ` [d-kernel] [PATCH vtry2 6/7] arm64/configs: refreshed Baikal-M specific config Alexey Sheplyakov 2022-09-02 7:33 ` [d-kernel] [PATCH vtry2 7/7] config-aarch64: enabled Baikal-M specific drivers Alexey Sheplyakov 2022-09-03 3:48 ` [d-kernel] (try2) sisyphus/std-def: Байкал-М: поддержка SDK-M 5.5, ноутбука Элпитех Vitaly Chikunov
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20220902073344.8310-6-asheplyakov@basealt.ru \ --to=asheplyakov@basealt.ru \ --cc=devel-kernel@lists.altlinux.org \ --cc=nir@basealt.ru \ --cc=rst@basealt.ru \ --cc=sin@basealt.ru \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
ALT Linux kernel packages development This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel-kernel/0 devel-kernel/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devel-kernel devel-kernel/ http://lore.altlinux.org/devel-kernel \ devel-kernel@altlinux.org devel-kernel@altlinux.ru devel-kernel@altlinux.com public-inbox-index devel-kernel Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel-kernel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git