add patches from vendor
Signed-off-by: Zhang Ning <832666+zhangn1985@users.noreply.github.com>
This commit is contained in:
parent
776a5e7eb2
commit
2ea130f08a
@ -0,0 +1,52 @@
|
||||
From 821202f2888fa0e41579f1adf919d63d6ba22349 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Sun, 16 Dec 2018 10:22:09 +0100
|
||||
Subject: [PATCH 46/91] drm: dw-hdmi: extract dw_hdmi_connector_update_edid()
|
||||
|
||||
Extract code that updates EDID into a dw_hdmi_connector_update_edid() helper,
|
||||
it will be called from dw_hdmi_connector_detect().
|
||||
|
||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
---
|
||||
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 11 +++++++++--
|
||||
1 file changed, 9 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||
index 51d1849..fcb2eeb 100644
|
||||
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||
@@ -2007,7 +2007,8 @@ dw_hdmi_connector_detect(struct drm_connector *connector, bool force)
|
||||
return hdmi->phy.ops->read_hpd(hdmi, hdmi->phy.data);
|
||||
}
|
||||
|
||||
-static int dw_hdmi_connector_get_modes(struct drm_connector *connector)
|
||||
+static int dw_hdmi_connector_update_edid(struct drm_connector *connector,
|
||||
+ bool add_modes)
|
||||
{
|
||||
struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi,
|
||||
connector);
|
||||
@@ -2026,7 +2027,8 @@ static int dw_hdmi_connector_get_modes(struct drm_connector *connector)
|
||||
hdmi->sink_has_audio = drm_detect_monitor_audio(edid);
|
||||
drm_connector_update_edid_property(connector, edid);
|
||||
cec_notifier_set_phys_addr_from_edid(hdmi->cec_notifier, edid);
|
||||
- ret = drm_add_edid_modes(connector, edid);
|
||||
+ if (add_modes)
|
||||
+ ret = drm_add_edid_modes(connector, edid);
|
||||
kfree(edid);
|
||||
} else {
|
||||
dev_dbg(hdmi->dev, "failed to get edid\n");
|
||||
@@ -2035,6 +2037,11 @@ static int dw_hdmi_connector_get_modes(struct drm_connector *connector)
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static int dw_hdmi_connector_get_modes(struct drm_connector *connector)
|
||||
+{
|
||||
+ return dw_hdmi_connector_update_edid(connector, true);
|
||||
+}
|
||||
+
|
||||
static void dw_hdmi_connector_force(struct drm_connector *connector)
|
||||
{
|
||||
struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi,
|
||||
--
|
||||
2.7.4
|
||||
|
||||
@ -0,0 +1,63 @@
|
||||
From ea694857e0d17d18249c027d2d33067fed690d54 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Sun, 16 Dec 2018 11:38:43 +0100
|
||||
Subject: [PATCH 47/91] drm: dw-hdmi: move dw_hdmi_connector_detect()
|
||||
|
||||
Move dw_hdmi_connector_detect() it will call dw_hdmi_connector_update_edid().
|
||||
|
||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
---
|
||||
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 30 +++++++++++++++---------------
|
||||
1 file changed, 15 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||
index fcb2eeb..35124ad 100644
|
||||
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||
@@ -1992,21 +1992,6 @@ static void dw_hdmi_update_phy_mask(struct dw_hdmi *hdmi)
|
||||
hdmi->rxsense);
|
||||
}
|
||||
|
||||
-static enum drm_connector_status
|
||||
-dw_hdmi_connector_detect(struct drm_connector *connector, bool force)
|
||||
-{
|
||||
- struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi,
|
||||
- connector);
|
||||
-
|
||||
- mutex_lock(&hdmi->mutex);
|
||||
- hdmi->force = DRM_FORCE_UNSPECIFIED;
|
||||
- dw_hdmi_update_power(hdmi);
|
||||
- dw_hdmi_update_phy_mask(hdmi);
|
||||
- mutex_unlock(&hdmi->mutex);
|
||||
-
|
||||
- return hdmi->phy.ops->read_hpd(hdmi, hdmi->phy.data);
|
||||
-}
|
||||
-
|
||||
static int dw_hdmi_connector_update_edid(struct drm_connector *connector,
|
||||
bool add_modes)
|
||||
{
|
||||
@@ -2037,6 +2022,21 @@ static int dw_hdmi_connector_update_edid(struct drm_connector *connector,
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static enum drm_connector_status
|
||||
+dw_hdmi_connector_detect(struct drm_connector *connector, bool force)
|
||||
+{
|
||||
+ struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi,
|
||||
+ connector);
|
||||
+
|
||||
+ mutex_lock(&hdmi->mutex);
|
||||
+ hdmi->force = DRM_FORCE_UNSPECIFIED;
|
||||
+ dw_hdmi_update_power(hdmi);
|
||||
+ dw_hdmi_update_phy_mask(hdmi);
|
||||
+ mutex_unlock(&hdmi->mutex);
|
||||
+
|
||||
+ return hdmi->phy.ops->read_hpd(hdmi, hdmi->phy.data);
|
||||
+}
|
||||
+
|
||||
static int dw_hdmi_connector_get_modes(struct drm_connector *connector)
|
||||
{
|
||||
return dw_hdmi_connector_update_edid(connector, true);
|
||||
--
|
||||
2.7.4
|
||||
|
||||
@ -0,0 +1,56 @@
|
||||
From 0c78d39230be2321844c878f452c8902e5626f14 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Sun, 16 Dec 2018 10:22:09 +0100
|
||||
Subject: [PATCH 48/91] drm: dw-hdmi: update CEC phys addr and EDID on HPD
|
||||
event
|
||||
|
||||
Update CEC phys addr and EDID on HPD event, fixes lost CEC phys addr and
|
||||
stale EDID when HDMI cable is unplugged/replugged or AVR is powered on/off.
|
||||
|
||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
---
|
||||
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 14 +++++++++-----
|
||||
1 file changed, 9 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||
index 35124ad..57d0969 100644
|
||||
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||
@@ -2025,6 +2025,7 @@ static int dw_hdmi_connector_update_edid(struct drm_connector *connector,
|
||||
static enum drm_connector_status
|
||||
dw_hdmi_connector_detect(struct drm_connector *connector, bool force)
|
||||
{
|
||||
+ enum drm_connector_status status;
|
||||
struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi,
|
||||
connector);
|
||||
|
||||
@@ -2034,7 +2035,14 @@ dw_hdmi_connector_detect(struct drm_connector *connector, bool force)
|
||||
dw_hdmi_update_phy_mask(hdmi);
|
||||
mutex_unlock(&hdmi->mutex);
|
||||
|
||||
- return hdmi->phy.ops->read_hpd(hdmi, hdmi->phy.data);
|
||||
+ status = hdmi->phy.ops->read_hpd(hdmi, hdmi->phy.data);
|
||||
+
|
||||
+ if (status == connector_status_connected)
|
||||
+ dw_hdmi_connector_update_edid(connector, false);
|
||||
+ else
|
||||
+ cec_notifier_set_phys_addr(hdmi->cec_notifier, CEC_PHYS_ADDR_INVALID);
|
||||
+
|
||||
+ return status;
|
||||
}
|
||||
|
||||
static int dw_hdmi_connector_get_modes(struct drm_connector *connector)
|
||||
@@ -2249,10 +2257,6 @@ static irqreturn_t dw_hdmi_irq(int irq, void *dev_id)
|
||||
dw_hdmi_setup_rx_sense(hdmi,
|
||||
phy_stat & HDMI_PHY_HPD,
|
||||
phy_stat & HDMI_PHY_RX_SENSE);
|
||||
-
|
||||
- if ((phy_stat & (HDMI_PHY_RX_SENSE | HDMI_PHY_HPD)) == 0)
|
||||
- cec_notifier_set_phys_addr(hdmi->cec_notifier,
|
||||
- CEC_PHYS_ADDR_INVALID);
|
||||
}
|
||||
|
||||
if (intr_stat & HDMI_IH_PHY_STAT0_HPD) {
|
||||
--
|
||||
2.7.4
|
||||
|
||||
@ -0,0 +1,60 @@
|
||||
From c2b69192a750ccd238a4b413bc54d9b7517c6eaa Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Sun, 16 Dec 2018 10:22:09 +0100
|
||||
Subject: [PATCH 49/91] Revert "drm/edid: make drm_edid_to_eld() static"
|
||||
|
||||
drm_edid_to_eld() is needed to update stale connector ELD on HPD event.
|
||||
|
||||
This reverts part of commit 79436a1c9bccf5e38cb6ea26e4e4b9283baf2e20.
|
||||
|
||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
---
|
||||
drivers/gpu/drm/drm_edid.c | 5 +++--
|
||||
include/drm/drm_edid.h | 1 +
|
||||
2 files changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
|
||||
index b506e36..694336e 100644
|
||||
--- a/drivers/gpu/drm/drm_edid.c
|
||||
+++ b/drivers/gpu/drm/drm_edid.c
|
||||
@@ -3892,7 +3892,7 @@ static void clear_eld(struct drm_connector *connector)
|
||||
connector->audio_latency[1] = 0;
|
||||
}
|
||||
|
||||
-/*
|
||||
+/**
|
||||
* drm_edid_to_eld - build ELD from EDID
|
||||
* @connector: connector corresponding to the HDMI/DP sink
|
||||
* @edid: EDID to parse
|
||||
@@ -3900,7 +3900,7 @@ static void clear_eld(struct drm_connector *connector)
|
||||
* Fill the ELD (EDID-Like Data) buffer for passing to the audio driver. The
|
||||
* HDCP and Port_ID ELD fields are left for the graphics driver to fill in.
|
||||
*/
|
||||
-static void drm_edid_to_eld(struct drm_connector *connector, struct edid *edid)
|
||||
+void drm_edid_to_eld(struct drm_connector *connector, struct edid *edid)
|
||||
{
|
||||
uint8_t *eld = connector->eld;
|
||||
u8 *cea;
|
||||
@@ -3985,6 +3985,7 @@ static void drm_edid_to_eld(struct drm_connector *connector, struct edid *edid)
|
||||
DRM_DEBUG_KMS("ELD size %d, SAD count %d\n",
|
||||
drm_eld_size(eld), total_sad_count);
|
||||
}
|
||||
+EXPORT_SYMBOL(drm_edid_to_eld);
|
||||
|
||||
/**
|
||||
* drm_edid_to_sad - extracts SADs from EDID
|
||||
diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h
|
||||
index e3c4048..3942d55 100644
|
||||
--- a/include/drm/drm_edid.h
|
||||
+++ b/include/drm/drm_edid.h
|
||||
@@ -333,6 +333,7 @@ struct drm_encoder;
|
||||
struct drm_connector;
|
||||
struct drm_display_mode;
|
||||
|
||||
+void drm_edid_to_eld(struct drm_connector *connector, struct edid *edid);
|
||||
int drm_edid_to_sad(struct edid *edid, struct cea_sad **sads);
|
||||
int drm_edid_to_speaker_allocation(struct edid *edid, u8 **sadb);
|
||||
int drm_av_sync_delay(struct drm_connector *connector,
|
||||
--
|
||||
2.7.4
|
||||
|
||||
@ -0,0 +1,29 @@
|
||||
From 0e1adfd3e936a5ce190e7bd3f89225379e2b7112 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Sun, 16 Dec 2018 10:22:09 +0100
|
||||
Subject: [PATCH 50/91] drm: dw-hdmi: update ELD on HPD event
|
||||
|
||||
Update connector ELD on HPD event, fixes stale ELD when
|
||||
HDMI cable is unplugged/replugged or AVR is powered on/off.
|
||||
|
||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
---
|
||||
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||
index 57d0969..830dc6a 100644
|
||||
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||
@@ -2014,6 +2014,8 @@ static int dw_hdmi_connector_update_edid(struct drm_connector *connector,
|
||||
cec_notifier_set_phys_addr_from_edid(hdmi->cec_notifier, edid);
|
||||
if (add_modes)
|
||||
ret = drm_add_edid_modes(connector, edid);
|
||||
+ else
|
||||
+ drm_edid_to_eld(connector, edid);
|
||||
kfree(edid);
|
||||
} else {
|
||||
dev_dbg(hdmi->dev, "failed to get edid\n");
|
||||
--
|
||||
2.7.4
|
||||
|
||||
@ -0,0 +1,81 @@
|
||||
From 37a62c492f6b916c604b9cc1d1d72a4b2766d5c6 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Sun, 16 Dec 2018 10:22:09 +0100
|
||||
Subject: [PATCH 51/91] ASoC: hdmi-codec: add hdmi_codec_eld_notify()
|
||||
|
||||
Add helper that will notify userspace when ELD control has changed.
|
||||
|
||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
---
|
||||
include/sound/hdmi-codec.h | 2 ++
|
||||
sound/soc/codecs/hdmi-codec.c | 24 ++++++++++++++++++++----
|
||||
2 files changed, 22 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/include/sound/hdmi-codec.h b/include/sound/hdmi-codec.h
|
||||
index 9483c55..7cf66a4 100644
|
||||
--- a/include/sound/hdmi-codec.h
|
||||
+++ b/include/sound/hdmi-codec.h
|
||||
@@ -107,6 +107,8 @@ struct hdmi_codec_pdata {
|
||||
void *data;
|
||||
};
|
||||
|
||||
+void hdmi_codec_eld_notify(struct device *dev);
|
||||
+
|
||||
#define HDMI_CODEC_DRV_NAME "hdmi-audio-codec"
|
||||
|
||||
#endif /* __HDMI_CODEC_H__ */
|
||||
diff --git a/sound/soc/codecs/hdmi-codec.c b/sound/soc/codecs/hdmi-codec.c
|
||||
index e5b6769..c9fa604 100644
|
||||
--- a/sound/soc/codecs/hdmi-codec.c
|
||||
+++ b/sound/soc/codecs/hdmi-codec.c
|
||||
@@ -285,6 +285,8 @@ struct hdmi_codec_priv {
|
||||
uint8_t eld[MAX_ELD_BYTES];
|
||||
struct snd_pcm_chmap *chmap_info;
|
||||
unsigned int chmap_idx;
|
||||
+ struct snd_card *snd_card;
|
||||
+ struct snd_kcontrol *kctl;
|
||||
};
|
||||
|
||||
static const struct snd_soc_dapm_widget hdmi_widgets[] = {
|
||||
@@ -649,7 +651,6 @@ static int hdmi_codec_pcm_new(struct snd_soc_pcm_runtime *rtd,
|
||||
{
|
||||
struct snd_soc_dai_driver *drv = dai->driver;
|
||||
struct hdmi_codec_priv *hcp = snd_soc_dai_get_drvdata(dai);
|
||||
- struct snd_kcontrol *kctl;
|
||||
struct snd_kcontrol_new hdmi_eld_ctl = {
|
||||
.access = SNDRV_CTL_ELEM_ACCESS_READ |
|
||||
SNDRV_CTL_ELEM_ACCESS_VOLATILE,
|
||||
@@ -678,12 +679,27 @@ static int hdmi_codec_pcm_new(struct snd_soc_pcm_runtime *rtd,
|
||||
hcp->chmap_idx = HDMI_CODEC_CHMAP_IDX_UNKNOWN;
|
||||
|
||||
/* add ELD ctl with the device number corresponding to the PCM stream */
|
||||
- kctl = snd_ctl_new1(&hdmi_eld_ctl, dai->component);
|
||||
- if (!kctl)
|
||||
+ hcp->kctl = snd_ctl_new1(&hdmi_eld_ctl, dai->component);
|
||||
+ if (!hcp->kctl)
|
||||
return -ENOMEM;
|
||||
|
||||
- return snd_ctl_add(rtd->card->snd_card, kctl);
|
||||
+ hcp->snd_card = rtd->card->snd_card;
|
||||
+
|
||||
+ return snd_ctl_add(hcp->snd_card, hcp->kctl);
|
||||
+}
|
||||
+
|
||||
+void hdmi_codec_eld_notify(struct device *dev)
|
||||
+{
|
||||
+ struct hdmi_codec_priv *hcp = dev_get_drvdata(dev);
|
||||
+ struct snd_ctl_elem_id id;
|
||||
+
|
||||
+ if (!hcp->snd_card || !hcp->kctl)
|
||||
+ return;
|
||||
+
|
||||
+ id = hcp->kctl->id;
|
||||
+ snd_ctl_notify(hcp->snd_card, SNDRV_CTL_EVENT_MASK_VALUE, &id);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(hdmi_codec_eld_notify);
|
||||
|
||||
static int hdmi_dai_probe(struct snd_soc_dai *dai)
|
||||
{
|
||||
--
|
||||
2.7.4
|
||||
|
||||
@ -0,0 +1,83 @@
|
||||
From 59e28e4505e197c2252ecab708bd45ad64a2d5c8 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Sun, 16 Dec 2018 12:56:33 +0100
|
||||
Subject: [PATCH 52/91] drm: dw-hdmi: add dw_hdmi_update_eld() callback
|
||||
|
||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
---
|
||||
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 15 +++++++++++++++
|
||||
include/drm/bridge/dw_hdmi.h | 2 ++
|
||||
sound/soc/codecs/hdmi-codec.c | 4 +++-
|
||||
3 files changed, 20 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||
index 830dc6a..fc6d551 100644
|
||||
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||
@@ -183,6 +183,7 @@ struct dw_hdmi {
|
||||
struct regmap *regm;
|
||||
void (*enable_audio)(struct dw_hdmi *hdmi);
|
||||
void (*disable_audio)(struct dw_hdmi *hdmi);
|
||||
+ void (*update_eld)(struct device *dev, u8 *eld);
|
||||
|
||||
struct cec_notifier *cec_notifier;
|
||||
};
|
||||
@@ -619,6 +620,19 @@ void dw_hdmi_audio_disable(struct dw_hdmi *hdmi)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dw_hdmi_audio_disable);
|
||||
|
||||
+static void dw_hdmi_update_eld(struct dw_hdmi *hdmi, u8 *eld)
|
||||
+{
|
||||
+ if (hdmi->audio && hdmi->update_eld)
|
||||
+ hdmi->update_eld(&hdmi->audio->dev, eld);
|
||||
+}
|
||||
+
|
||||
+void dw_hdmi_set_update_eld(struct dw_hdmi *hdmi,
|
||||
+ void (*update_eld)(struct device *dev, u8 *eld))
|
||||
+{
|
||||
+ hdmi->update_eld = update_eld;
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(dw_hdmi_set_update_eld);
|
||||
+
|
||||
static bool hdmi_bus_fmt_is_rgb(unsigned int bus_format)
|
||||
{
|
||||
switch (bus_format) {
|
||||
@@ -2016,6 +2030,7 @@ static int dw_hdmi_connector_update_edid(struct drm_connector *connector,
|
||||
ret = drm_add_edid_modes(connector, edid);
|
||||
else
|
||||
drm_edid_to_eld(connector, edid);
|
||||
+ dw_hdmi_update_eld(hdmi, connector->eld);
|
||||
kfree(edid);
|
||||
} else {
|
||||
dev_dbg(hdmi->dev, "failed to get edid\n");
|
||||
diff --git a/include/drm/bridge/dw_hdmi.h b/include/drm/bridge/dw_hdmi.h
|
||||
index 3768265..423576b 100644
|
||||
--- a/include/drm/bridge/dw_hdmi.h
|
||||
+++ b/include/drm/bridge/dw_hdmi.h
|
||||
@@ -164,6 +164,8 @@ void dw_hdmi_set_sample_rate(struct dw_hdmi *hdmi, unsigned int rate);
|
||||
void dw_hdmi_audio_enable(struct dw_hdmi *hdmi);
|
||||
void dw_hdmi_audio_disable(struct dw_hdmi *hdmi);
|
||||
void dw_hdmi_set_high_tmds_clock_ratio(struct dw_hdmi *hdmi);
|
||||
+void dw_hdmi_set_update_eld(struct dw_hdmi *hdmi,
|
||||
+ void (*update_eld)(struct device *dev, u8 *eld));
|
||||
|
||||
/* PHY configuration */
|
||||
void dw_hdmi_phy_i2c_set_addr(struct dw_hdmi *hdmi, u8 address);
|
||||
diff --git a/sound/soc/codecs/hdmi-codec.c b/sound/soc/codecs/hdmi-codec.c
|
||||
index c9fa604..47e518c 100644
|
||||
--- a/sound/soc/codecs/hdmi-codec.c
|
||||
+++ b/sound/soc/codecs/hdmi-codec.c
|
||||
@@ -693,7 +693,9 @@ void hdmi_codec_eld_notify(struct device *dev)
|
||||
struct hdmi_codec_priv *hcp = dev_get_drvdata(dev);
|
||||
struct snd_ctl_elem_id id;
|
||||
|
||||
- if (!hcp->snd_card || !hcp->kctl)
|
||||
+ if (!hcp ||
|
||||
+ !hcp->snd_card ||
|
||||
+ !hcp->kctl)
|
||||
return;
|
||||
|
||||
id = hcp->kctl->id;
|
||||
--
|
||||
2.7.4
|
||||
|
||||
@ -0,0 +1,105 @@
|
||||
From 86cad3dffc0c3a7216e208bb497b84a468e676cc Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Sun, 16 Dec 2018 10:22:09 +0100
|
||||
Subject: [PATCH 53/91] drm: dw-hdmi-i2s: add .get_eld callback for ALSA SoC
|
||||
|
||||
Add get_eld() callback and call hdmi_codec_eld_notify() when ELD has changed.
|
||||
|
||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
---
|
||||
drivers/gpu/drm/bridge/synopsys/dw-hdmi-audio.h | 1 +
|
||||
.../gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c | 36 +++++++++++++++++++++-
|
||||
2 files changed, 36 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-audio.h b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-audio.h
|
||||
index 63b5756..69b8a97 100644
|
||||
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-audio.h
|
||||
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-audio.h
|
||||
@@ -14,6 +14,7 @@ struct dw_hdmi_audio_data {
|
||||
|
||||
struct dw_hdmi_i2s_audio_data {
|
||||
struct dw_hdmi *hdmi;
|
||||
+ u8 eld[128];
|
||||
|
||||
void (*write)(struct dw_hdmi *hdmi, u8 val, int offset);
|
||||
u8 (*read)(struct dw_hdmi *hdmi, int offset);
|
||||
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c
|
||||
index 8f9c8a6..609ebad 100644
|
||||
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c
|
||||
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c
|
||||
@@ -83,6 +83,32 @@ static void dw_hdmi_i2s_audio_shutdown(struct device *dev, void *data)
|
||||
hdmi_write(audio, HDMI_AUD_CONF0_SW_RESET, HDMI_AUD_CONF0);
|
||||
}
|
||||
|
||||
+static void dw_hdmi_i2s_update_eld(struct device *dev, u8 *eld)
|
||||
+{
|
||||
+ struct dw_hdmi_i2s_audio_data *audio = dev_get_platdata(dev);
|
||||
+ struct platform_device *hcpdev = dev_get_drvdata(dev);
|
||||
+
|
||||
+ if (!audio || !hcpdev)
|
||||
+ return;
|
||||
+
|
||||
+ if (!memcmp(audio->eld, eld, sizeof(audio->eld)))
|
||||
+ return;
|
||||
+
|
||||
+ memcpy(audio->eld, eld, sizeof(audio->eld));
|
||||
+
|
||||
+ hdmi_codec_eld_notify(&hcpdev->dev);
|
||||
+}
|
||||
+
|
||||
+static int dw_hdmi_i2s_get_eld(struct device *dev, void *data,
|
||||
+ u8 *buf, size_t len)
|
||||
+{
|
||||
+ struct dw_hdmi_i2s_audio_data *audio = data;
|
||||
+
|
||||
+ memcpy(buf, audio->eld, min(sizeof(audio->eld), len));
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int dw_hdmi_i2s_get_dai_id(struct snd_soc_component *component,
|
||||
struct device_node *endpoint)
|
||||
{
|
||||
@@ -106,16 +132,19 @@ static int dw_hdmi_i2s_get_dai_id(struct snd_soc_component *component,
|
||||
static struct hdmi_codec_ops dw_hdmi_i2s_ops = {
|
||||
.hw_params = dw_hdmi_i2s_hw_params,
|
||||
.audio_shutdown = dw_hdmi_i2s_audio_shutdown,
|
||||
+ .get_eld = dw_hdmi_i2s_get_eld,
|
||||
.get_dai_id = dw_hdmi_i2s_get_dai_id,
|
||||
};
|
||||
|
||||
static int snd_dw_hdmi_probe(struct platform_device *pdev)
|
||||
{
|
||||
- struct dw_hdmi_i2s_audio_data *audio = pdev->dev.platform_data;
|
||||
+ struct dw_hdmi_i2s_audio_data *audio = dev_get_platdata(&pdev->dev);
|
||||
struct platform_device_info pdevinfo;
|
||||
struct hdmi_codec_pdata pdata;
|
||||
struct platform_device *platform;
|
||||
|
||||
+ memset(audio->eld, 0, sizeof(audio->eld));
|
||||
+
|
||||
pdata.ops = &dw_hdmi_i2s_ops;
|
||||
pdata.i2s = 1;
|
||||
pdata.max_i2s_channels = 6;
|
||||
@@ -135,13 +164,18 @@ static int snd_dw_hdmi_probe(struct platform_device *pdev)
|
||||
|
||||
dev_set_drvdata(&pdev->dev, platform);
|
||||
|
||||
+ dw_hdmi_set_update_eld(audio->hdmi, dw_hdmi_i2s_update_eld);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int snd_dw_hdmi_remove(struct platform_device *pdev)
|
||||
{
|
||||
+ struct dw_hdmi_i2s_audio_data *audio = dev_get_platdata(&pdev->dev);
|
||||
struct platform_device *platform = dev_get_drvdata(&pdev->dev);
|
||||
|
||||
+ dw_hdmi_set_update_eld(audio->hdmi, NULL);
|
||||
+
|
||||
platform_device_unregister(platform);
|
||||
|
||||
return 0;
|
||||
--
|
||||
2.7.4
|
||||
|
||||
@ -0,0 +1,170 @@
|
||||
From 24e1ed5e6ed731a7099b9c63e53f1408549a8d8b Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Sun, 25 Mar 2018 22:17:06 +0200
|
||||
Subject: [PATCH 54/91] ASoC: hdmi-codec: reorder channel allocation list
|
||||
|
||||
Wrong channel allocation is selected by hdmi_codec_get_ch_alloc_table_idx().
|
||||
|
||||
E.g when ELD reports FL|FR|LFE|FC|RL|RR or FL|FR|LFE|FC|RL|RR|RC|RLC|RRC
|
||||
|
||||
ca_id 0x01 with speaker mask FL|FR|LFE gets selected instead of
|
||||
ca_id 0x03 with speaker mask FL|FR|LFE|FC for 4 channels
|
||||
|
||||
and
|
||||
|
||||
ca_id 0x04 with speaker mask FL|FR|RC gets selected instead of
|
||||
ca_id 0x0b with speaker mask FL|FR|LFE|FC|RL|RR for 6 channels
|
||||
|
||||
Fix this by reorder the channel allocation list with
|
||||
most specific speaker mask at the top.
|
||||
|
||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
---
|
||||
sound/soc/codecs/hdmi-codec.c | 115 +++++++++++++++++++-----------------------
|
||||
1 file changed, 53 insertions(+), 62 deletions(-)
|
||||
|
||||
diff --git a/sound/soc/codecs/hdmi-codec.c b/sound/soc/codecs/hdmi-codec.c
|
||||
index 47e518c..3bf9fb0 100644
|
||||
--- a/sound/soc/codecs/hdmi-codec.c
|
||||
+++ b/sound/soc/codecs/hdmi-codec.c
|
||||
@@ -196,84 +196,75 @@ static const struct snd_pcm_chmap_elem hdmi_codec_8ch_chmaps[] = {
|
||||
/*
|
||||
* hdmi_codec_channel_alloc: speaker configuration available for CEA
|
||||
*
|
||||
- * This is an ordered list that must match with hdmi_codec_8ch_chmaps struct
|
||||
+ * This is an ordered list where ca_id must exists in hdmi_codec_8ch_chmaps
|
||||
* The preceding ones have better chances to be selected by
|
||||
* hdmi_codec_get_ch_alloc_table_idx().
|
||||
*/
|
||||
static const struct hdmi_codec_cea_spk_alloc hdmi_codec_channel_alloc[] = {
|
||||
{ .ca_id = 0x00, .n_ch = 2,
|
||||
- .mask = FL | FR},
|
||||
- /* 2.1 */
|
||||
- { .ca_id = 0x01, .n_ch = 4,
|
||||
- .mask = FL | FR | LFE},
|
||||
- /* Dolby Surround */
|
||||
+ .mask = FL | FR },
|
||||
+ { .ca_id = 0x03, .n_ch = 4,
|
||||
+ .mask = FL | FR | LFE | FC },
|
||||
{ .ca_id = 0x02, .n_ch = 4,
|
||||
.mask = FL | FR | FC },
|
||||
- /* surround51 */
|
||||
+ { .ca_id = 0x01, .n_ch = 4,
|
||||
+ .mask = FL | FR | LFE },
|
||||
{ .ca_id = 0x0b, .n_ch = 6,
|
||||
- .mask = FL | FR | LFE | FC | RL | RR},
|
||||
- /* surround40 */
|
||||
- { .ca_id = 0x08, .n_ch = 6,
|
||||
- .mask = FL | FR | RL | RR },
|
||||
- /* surround41 */
|
||||
- { .ca_id = 0x09, .n_ch = 6,
|
||||
- .mask = FL | FR | LFE | RL | RR },
|
||||
- /* surround50 */
|
||||
+ .mask = FL | FR | LFE | FC | RL | RR },
|
||||
{ .ca_id = 0x0a, .n_ch = 6,
|
||||
.mask = FL | FR | FC | RL | RR },
|
||||
- /* 6.1 */
|
||||
- { .ca_id = 0x0f, .n_ch = 8,
|
||||
- .mask = FL | FR | LFE | FC | RL | RR | RC },
|
||||
- /* surround71 */
|
||||
+ { .ca_id = 0x09, .n_ch = 6,
|
||||
+ .mask = FL | FR | LFE | RL | RR },
|
||||
+ { .ca_id = 0x08, .n_ch = 6,
|
||||
+ .mask = FL | FR | RL | RR },
|
||||
+ { .ca_id = 0x07, .n_ch = 6,
|
||||
+ .mask = FL | FR | LFE | FC | RC },
|
||||
+ { .ca_id = 0x06, .n_ch = 6,
|
||||
+ .mask = FL | FR | FC | RC },
|
||||
+ { .ca_id = 0x05, .n_ch = 6,
|
||||
+ .mask = FL | FR | LFE | RC },
|
||||
+ { .ca_id = 0x04, .n_ch = 6,
|
||||
+ .mask = FL | FR | RC },
|
||||
{ .ca_id = 0x13, .n_ch = 8,
|
||||
.mask = FL | FR | LFE | FC | RL | RR | RLC | RRC },
|
||||
- /* others */
|
||||
- { .ca_id = 0x03, .n_ch = 8,
|
||||
- .mask = FL | FR | LFE | FC },
|
||||
- { .ca_id = 0x04, .n_ch = 8,
|
||||
- .mask = FL | FR | RC},
|
||||
- { .ca_id = 0x05, .n_ch = 8,
|
||||
- .mask = FL | FR | LFE | RC },
|
||||
- { .ca_id = 0x06, .n_ch = 8,
|
||||
- .mask = FL | FR | FC | RC },
|
||||
- { .ca_id = 0x07, .n_ch = 8,
|
||||
- .mask = FL | FR | LFE | FC | RC },
|
||||
- { .ca_id = 0x0c, .n_ch = 8,
|
||||
- .mask = FL | FR | RC | RL | RR },
|
||||
- { .ca_id = 0x0d, .n_ch = 8,
|
||||
- .mask = FL | FR | LFE | RL | RR | RC },
|
||||
- { .ca_id = 0x0e, .n_ch = 8,
|
||||
- .mask = FL | FR | FC | RL | RR | RC },
|
||||
- { .ca_id = 0x10, .n_ch = 8,
|
||||
- .mask = FL | FR | RL | RR | RLC | RRC },
|
||||
- { .ca_id = 0x11, .n_ch = 8,
|
||||
- .mask = FL | FR | LFE | RL | RR | RLC | RRC },
|
||||
+ { .ca_id = 0x1f, .n_ch = 8,
|
||||
+ .mask = FL | FR | LFE | FC | RL | RR | FLC | FRC },
|
||||
{ .ca_id = 0x12, .n_ch = 8,
|
||||
.mask = FL | FR | FC | RL | RR | RLC | RRC },
|
||||
- { .ca_id = 0x14, .n_ch = 8,
|
||||
- .mask = FL | FR | FLC | FRC },
|
||||
- { .ca_id = 0x15, .n_ch = 8,
|
||||
- .mask = FL | FR | LFE | FLC | FRC },
|
||||
- { .ca_id = 0x16, .n_ch = 8,
|
||||
- .mask = FL | FR | FC | FLC | FRC },
|
||||
- { .ca_id = 0x17, .n_ch = 8,
|
||||
- .mask = FL | FR | LFE | FC | FLC | FRC },
|
||||
- { .ca_id = 0x18, .n_ch = 8,
|
||||
- .mask = FL | FR | RC | FLC | FRC },
|
||||
- { .ca_id = 0x19, .n_ch = 8,
|
||||
- .mask = FL | FR | LFE | RC | FLC | FRC },
|
||||
- { .ca_id = 0x1a, .n_ch = 8,
|
||||
- .mask = FL | FR | RC | FC | FLC | FRC },
|
||||
- { .ca_id = 0x1b, .n_ch = 8,
|
||||
- .mask = FL | FR | LFE | RC | FC | FLC | FRC },
|
||||
- { .ca_id = 0x1c, .n_ch = 8,
|
||||
- .mask = FL | FR | RL | RR | FLC | FRC },
|
||||
- { .ca_id = 0x1d, .n_ch = 8,
|
||||
- .mask = FL | FR | LFE | RL | RR | FLC | FRC },
|
||||
{ .ca_id = 0x1e, .n_ch = 8,
|
||||
.mask = FL | FR | FC | RL | RR | FLC | FRC },
|
||||
- { .ca_id = 0x1f, .n_ch = 8,
|
||||
- .mask = FL | FR | LFE | FC | RL | RR | FLC | FRC },
|
||||
+ { .ca_id = 0x11, .n_ch = 8,
|
||||
+ .mask = FL | FR | LFE | RL | RR | RLC | RRC },
|
||||
+ { .ca_id = 0x1d, .n_ch = 8,
|
||||
+ .mask = FL | FR | LFE | RL | RR | FLC | FRC },
|
||||
+ { .ca_id = 0x10, .n_ch = 8,
|
||||
+ .mask = FL | FR | RL | RR | RLC | RRC },
|
||||
+ { .ca_id = 0x1c, .n_ch = 8,
|
||||
+ .mask = FL | FR | RL | RR | FLC | FRC },
|
||||
+ { .ca_id = 0x0f, .n_ch = 8,
|
||||
+ .mask = FL | FR | LFE | FC | RL | RR | RC },
|
||||
+ { .ca_id = 0x1b, .n_ch = 8,
|
||||
+ .mask = FL | FR | LFE | RC | FC | FLC | FRC },
|
||||
+ { .ca_id = 0x0e, .n_ch = 8,
|
||||
+ .mask = FL | FR | FC | RL | RR | RC },
|
||||
+ { .ca_id = 0x1a, .n_ch = 8,
|
||||
+ .mask = FL | FR | RC | FC | FLC | FRC },
|
||||
+ { .ca_id = 0x0d, .n_ch = 8,
|
||||
+ .mask = FL | FR | LFE | RL | RR | RC },
|
||||
+ { .ca_id = 0x19, .n_ch = 8,
|
||||
+ .mask = FL | FR | LFE | RC | FLC | FRC },
|
||||
+ { .ca_id = 0x0c, .n_ch = 8,
|
||||
+ .mask = FL | FR | RC | RL | RR },
|
||||
+ { .ca_id = 0x18, .n_ch = 8,
|
||||
+ .mask = FL | FR | RC | FLC | FRC },
|
||||
+ { .ca_id = 0x17, .n_ch = 8,
|
||||
+ .mask = FL | FR | LFE | FC | FLC | FRC },
|
||||
+ { .ca_id = 0x16, .n_ch = 8,
|
||||
+ .mask = FL | FR | FC | FLC | FRC },
|
||||
+ { .ca_id = 0x15, .n_ch = 8,
|
||||
+ .mask = FL | FR | LFE | FLC | FRC },
|
||||
+ { .ca_id = 0x14, .n_ch = 8,
|
||||
+ .mask = FL | FR | FLC | FRC },
|
||||
};
|
||||
|
||||
struct hdmi_codec_priv {
|
||||
--
|
||||
2.7.4
|
||||
|
||||
@ -0,0 +1,229 @@
|
||||
From 825323b9734ff59ff7fc39c8bd095ec671be3563 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Tue, 10 Jul 2018 20:54:33 +0200
|
||||
Subject: [PATCH 55/91] drm: dw-hdmi-i2s: add multi-channel lpcm support
|
||||
|
||||
---
|
||||
drivers/gpu/drm/bridge/synopsys/dw-hdmi-audio.h | 1 +
|
||||
.../gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c | 75 +++++++++++++++++++++-
|
||||
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 1 +
|
||||
drivers/gpu/drm/bridge/synopsys/dw-hdmi.h | 24 +++++++
|
||||
4 files changed, 98 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-audio.h b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-audio.h
|
||||
index 69b8a97..9e9cbf9 100644
|
||||
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-audio.h
|
||||
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-audio.h
|
||||
@@ -18,6 +18,7 @@ struct dw_hdmi_i2s_audio_data {
|
||||
|
||||
void (*write)(struct dw_hdmi *hdmi, u8 val, int offset);
|
||||
u8 (*read)(struct dw_hdmi *hdmi, int offset);
|
||||
+ void (*mod)(struct dw_hdmi *hdmi, u8 data, u8 mask, unsigned reg);
|
||||
};
|
||||
|
||||
#endif
|
||||
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c
|
||||
index 609ebad..637ef1f 100644
|
||||
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c
|
||||
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c
|
||||
@@ -32,6 +32,14 @@ static inline u8 hdmi_read(struct dw_hdmi_i2s_audio_data *audio, int offset)
|
||||
return audio->read(hdmi, offset);
|
||||
}
|
||||
|
||||
+static inline void hdmi_update_bits(struct dw_hdmi_i2s_audio_data *audio,
|
||||
+ u8 data, u8 mask, unsigned int reg)
|
||||
+{
|
||||
+ struct dw_hdmi *hdmi = audio->hdmi;
|
||||
+
|
||||
+ audio->mod(hdmi, data, mask, reg);
|
||||
+}
|
||||
+
|
||||
static int dw_hdmi_i2s_hw_params(struct device *dev, void *data,
|
||||
struct hdmi_codec_daifmt *fmt,
|
||||
struct hdmi_codec_params *hparms)
|
||||
@@ -41,6 +49,7 @@ static int dw_hdmi_i2s_hw_params(struct device *dev, void *data,
|
||||
u8 conf0 = 0;
|
||||
u8 conf1 = 0;
|
||||
u8 inputclkfs = 0;
|
||||
+ u8 val;
|
||||
|
||||
/* it cares I2S only */
|
||||
if ((fmt->fmt != HDMI_I2S) ||
|
||||
@@ -49,8 +58,23 @@ static int dw_hdmi_i2s_hw_params(struct device *dev, void *data,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
- inputclkfs = HDMI_AUD_INPUTCLKFS_64FS;
|
||||
- conf0 = HDMI_AUD_CONF0_I2S_ALL_ENABLE;
|
||||
+ inputclkfs = HDMI_AUD_INPUTCLKFS_64FS;
|
||||
+
|
||||
+ switch (hparms->channels) {
|
||||
+ case 2:
|
||||
+ conf0 = HDMI_AUD_CONF0_I2S_2CHANNEL_ENABLE;
|
||||
+ break;
|
||||
+ case 4:
|
||||
+ conf0 = HDMI_AUD_CONF0_I2S_4CHANNEL_ENABLE;
|
||||
+ break;
|
||||
+ case 6:
|
||||
+ conf0 = HDMI_AUD_CONF0_I2S_6CHANNEL_ENABLE;
|
||||
+ break;
|
||||
+ case 8:
|
||||
+ default:
|
||||
+ conf0 = HDMI_AUD_CONF0_I2S_ALL_ENABLE;
|
||||
+ break;
|
||||
+ }
|
||||
|
||||
switch (hparms->sample_width) {
|
||||
case 16:
|
||||
@@ -62,12 +86,56 @@ static int dw_hdmi_i2s_hw_params(struct device *dev, void *data,
|
||||
break;
|
||||
}
|
||||
|
||||
+ hdmi_update_bits(audio, HDMI_AUD_CONF0_SW_RESET,
|
||||
+ HDMI_AUD_CONF0_SW_RESET, HDMI_AUD_CONF0);
|
||||
+ hdmi_write(audio, (u8)~HDMI_MC_SWRSTZ_I2SSWRST_REQ, HDMI_MC_SWRSTZ);
|
||||
+
|
||||
dw_hdmi_set_sample_rate(hdmi, hparms->sample_rate);
|
||||
|
||||
hdmi_write(audio, inputclkfs, HDMI_AUD_INPUTCLKFS);
|
||||
hdmi_write(audio, conf0, HDMI_AUD_CONF0);
|
||||
hdmi_write(audio, conf1, HDMI_AUD_CONF1);
|
||||
|
||||
+ val = HDMI_FC_AUDSCONF_AUD_PACKET_LAYOUT_LAYOUT0;
|
||||
+ if (hparms->channels > 2)
|
||||
+ val = HDMI_FC_AUDSCONF_AUD_PACKET_LAYOUT_LAYOUT1;
|
||||
+ hdmi_update_bits(audio, val, HDMI_FC_AUDSCONF_AUD_PACKET_LAYOUT_MASK,
|
||||
+ HDMI_FC_AUDSCONF);
|
||||
+
|
||||
+ switch (hparms->sample_rate) {
|
||||
+ case 32000:
|
||||
+ val = HDMI_FC_AUDSCHNLS_SAMPFREQ_32K;
|
||||
+ break;
|
||||
+ case 44100:
|
||||
+ val = HDMI_FC_AUDSCHNLS_SAMPFREQ_441K;
|
||||
+ break;
|
||||
+ case 48000:
|
||||
+ val = HDMI_FC_AUDSCHNLS_SAMPFREQ_48K;
|
||||
+ break;
|
||||
+ case 88200:
|
||||
+ val = HDMI_FC_AUDSCHNLS_SAMPFREQ_882K;
|
||||
+ break;
|
||||
+ case 96000:
|
||||
+ val = HDMI_FC_AUDSCHNLS_SAMPFREQ_96K;
|
||||
+ break;
|
||||
+ case 176400:
|
||||
+ val = HDMI_FC_AUDSCHNLS_SAMPFREQ_1764K;
|
||||
+ break;
|
||||
+ case 192000:
|
||||
+ val = HDMI_FC_AUDSCHNLS_SAMPFREQ_192K;
|
||||
+ break;
|
||||
+ default:
|
||||
+ val = HDMI_FC_AUDSCHNLS_SAMPFREQ_441K;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ hdmi_update_bits(audio, val, HDMI_FC_AUDSCHNLS7_SAMPFREQ_MASK,
|
||||
+ HDMI_FC_AUDSCHNLS7);
|
||||
+ hdmi_update_bits(audio,
|
||||
+ (hparms->channels - 1) << HDMI_FC_AUDICONF0_CC_OFFSET,
|
||||
+ HDMI_FC_AUDICONF0_CC_MASK, HDMI_FC_AUDICONF0);
|
||||
+ hdmi_write(audio, hparms->cea.channel_allocation, HDMI_FC_AUDICONF2);
|
||||
+
|
||||
dw_hdmi_audio_enable(hdmi);
|
||||
|
||||
return 0;
|
||||
@@ -81,6 +149,7 @@ static void dw_hdmi_i2s_audio_shutdown(struct device *dev, void *data)
|
||||
dw_hdmi_audio_disable(hdmi);
|
||||
|
||||
hdmi_write(audio, HDMI_AUD_CONF0_SW_RESET, HDMI_AUD_CONF0);
|
||||
+ hdmi_write(audio, (u8)~HDMI_MC_SWRSTZ_I2SSWRST_REQ, HDMI_MC_SWRSTZ);
|
||||
}
|
||||
|
||||
static void dw_hdmi_i2s_update_eld(struct device *dev, u8 *eld)
|
||||
@@ -147,7 +216,7 @@ static int snd_dw_hdmi_probe(struct platform_device *pdev)
|
||||
|
||||
pdata.ops = &dw_hdmi_i2s_ops;
|
||||
pdata.i2s = 1;
|
||||
- pdata.max_i2s_channels = 6;
|
||||
+ pdata.max_i2s_channels = 8;
|
||||
pdata.data = audio;
|
||||
|
||||
memset(&pdevinfo, 0, sizeof(pdevinfo));
|
||||
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||
index fc6d551..ae39696 100644
|
||||
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||
@@ -2640,6 +2640,7 @@ __dw_hdmi_probe(struct platform_device *pdev,
|
||||
audio.hdmi = hdmi;
|
||||
audio.write = hdmi_writeb;
|
||||
audio.read = hdmi_readb;
|
||||
+ audio.mod = hdmi_modb;
|
||||
hdmi->enable_audio = dw_hdmi_i2s_audio_enable;
|
||||
hdmi->disable_audio = dw_hdmi_i2s_audio_disable;
|
||||
|
||||
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.h b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.h
|
||||
index 3f3c616..26d2f1b 100644
|
||||
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.h
|
||||
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.h
|
||||
@@ -162,6 +162,15 @@
|
||||
#define HDMI_FC_SPDDEVICEINF 0x1062
|
||||
#define HDMI_FC_AUDSCONF 0x1063
|
||||
#define HDMI_FC_AUDSSTAT 0x1064
|
||||
+#define HDMI_FC_AUDSCHNLS0 0x1067
|
||||
+#define HDMI_FC_AUDSCHNLS1 0x1068
|
||||
+#define HDMI_FC_AUDSCHNLS2 0x1069
|
||||
+#define HDMI_FC_AUDSCHNLS3 0x106a
|
||||
+#define HDMI_FC_AUDSCHNLS4 0x106b
|
||||
+#define HDMI_FC_AUDSCHNLS5 0x106c
|
||||
+#define HDMI_FC_AUDSCHNLS6 0x106d
|
||||
+#define HDMI_FC_AUDSCHNLS7 0x106e
|
||||
+#define HDMI_FC_AUDSCHNLS8 0x106f
|
||||
#define HDMI_FC_DATACH0FILL 0x1070
|
||||
#define HDMI_FC_DATACH1FILL 0x1071
|
||||
#define HDMI_FC_DATACH2FILL 0x1072
|
||||
@@ -710,6 +719,8 @@ enum {
|
||||
/* HDMI_FC_AUDSCHNLS7 field values */
|
||||
HDMI_FC_AUDSCHNLS7_ACCURACY_OFFSET = 4,
|
||||
HDMI_FC_AUDSCHNLS7_ACCURACY_MASK = 0x30,
|
||||
+ HDMI_FC_AUDSCHNLS7_SAMPFREQ_OFFSET = 0,
|
||||
+ HDMI_FC_AUDSCHNLS7_SAMPFREQ_MASK = 0x0f,
|
||||
|
||||
/* HDMI_FC_AUDSCHNLS8 field values */
|
||||
HDMI_FC_AUDSCHNLS8_ORIGSAMPFREQ_MASK = 0xf0,
|
||||
@@ -717,6 +728,15 @@ enum {
|
||||
HDMI_FC_AUDSCHNLS8_WORDLEGNTH_MASK = 0x0f,
|
||||
HDMI_FC_AUDSCHNLS8_WORDLEGNTH_OFFSET = 0,
|
||||
|
||||
+/* HDMI_FC_AUDSCHNLS sampling frequency */
|
||||
+ HDMI_FC_AUDSCHNLS_SAMPFREQ_32K = 0x3,
|
||||
+ HDMI_FC_AUDSCHNLS_SAMPFREQ_441K = 0x0,
|
||||
+ HDMI_FC_AUDSCHNLS_SAMPFREQ_48K = 0x2,
|
||||
+ HDMI_FC_AUDSCHNLS_SAMPFREQ_882K = 0x8,
|
||||
+ HDMI_FC_AUDSCHNLS_SAMPFREQ_96K = 0xa,
|
||||
+ HDMI_FC_AUDSCHNLS_SAMPFREQ_1764K = 0xc,
|
||||
+ HDMI_FC_AUDSCHNLS_SAMPFREQ_192K = 0xe,
|
||||
+
|
||||
/* FC_AUDSCONF field values */
|
||||
HDMI_FC_AUDSCONF_AUD_PACKET_SAMPFIT_MASK = 0xF0,
|
||||
HDMI_FC_AUDSCONF_AUD_PACKET_SAMPFIT_OFFSET = 4,
|
||||
@@ -869,6 +889,9 @@ enum {
|
||||
|
||||
/* AUD_CONF0 field values */
|
||||
HDMI_AUD_CONF0_SW_RESET = 0x80,
|
||||
+ HDMI_AUD_CONF0_I2S_2CHANNEL_ENABLE = 0x21,
|
||||
+ HDMI_AUD_CONF0_I2S_4CHANNEL_ENABLE = 0x23,
|
||||
+ HDMI_AUD_CONF0_I2S_6CHANNEL_ENABLE = 0x27,
|
||||
HDMI_AUD_CONF0_I2S_ALL_ENABLE = 0x2F,
|
||||
|
||||
/* AUD_CONF1 field values */
|
||||
@@ -942,6 +965,7 @@ enum {
|
||||
HDMI_MC_CLKDIS_PIXELCLK_DISABLE = 0x1,
|
||||
|
||||
/* MC_SWRSTZ field values */
|
||||
+ HDMI_MC_SWRSTZ_I2SSWRST_REQ = 0x08,
|
||||
HDMI_MC_SWRSTZ_TMDSSWRST_REQ = 0x02,
|
||||
|
||||
/* MC_FLOWCTRL field values */
|
||||
--
|
||||
2.7.4
|
||||
|
||||
@ -0,0 +1,29 @@
|
||||
From aa59a04f1753a2537a8544d39d5e61cc69337661 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Mon, 9 Jul 2018 21:25:15 +0200
|
||||
Subject: [PATCH 56/91] drm: dw-hdmi: call hdmi_set_cts_n after clock is
|
||||
enabled
|
||||
|
||||
---
|
||||
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||
index ae39696..5596703 100644
|
||||
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
|
||||
@@ -573,6 +573,11 @@ static void hdmi_enable_audio_clk(struct dw_hdmi *hdmi, bool enable)
|
||||
else
|
||||
hdmi->mc_clkdis |= HDMI_MC_CLKDIS_AUDCLK_DISABLE;
|
||||
hdmi_writeb(hdmi, hdmi->mc_clkdis, HDMI_MC_CLKDIS);
|
||||
+
|
||||
+ if (enable) {
|
||||
+ hdmi_set_cts_n(hdmi, hdmi->audio_cts, 0);
|
||||
+ hdmi_set_cts_n(hdmi, hdmi->audio_cts, hdmi->audio_n);
|
||||
+ }
|
||||
}
|
||||
|
||||
static void dw_hdmi_ahb_audio_enable(struct dw_hdmi *hdmi)
|
||||
--
|
||||
2.7.4
|
||||
|
||||
26
patch/kernel/meson64-dev/0059-fix-chmap_idx.patch
Normal file
26
patch/kernel/meson64-dev/0059-fix-chmap_idx.patch
Normal file
@ -0,0 +1,26 @@
|
||||
From 6b0ff7f03dab0d987da7685dc5afed7e5434f6bf Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Sun, 23 Dec 2018 02:24:38 +0100
|
||||
Subject: [PATCH 59/91] fix chmap_idx
|
||||
|
||||
---
|
||||
sound/soc/codecs/hdmi-codec.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/sound/soc/codecs/hdmi-codec.c b/sound/soc/codecs/hdmi-codec.c
|
||||
index 3bf9fb0..918e0d9 100644
|
||||
--- a/sound/soc/codecs/hdmi-codec.c
|
||||
+++ b/sound/soc/codecs/hdmi-codec.c
|
||||
@@ -373,7 +373,8 @@ static int hdmi_codec_chmap_ctl_get(struct snd_kcontrol *kcontrol,
|
||||
struct snd_pcm_chmap *info = snd_kcontrol_chip(kcontrol);
|
||||
struct hdmi_codec_priv *hcp = info->private_data;
|
||||
|
||||
- map = info->chmap[hcp->chmap_idx].map;
|
||||
+ if (hcp->chmap_idx != HDMI_CODEC_CHMAP_IDX_UNKNOWN)
|
||||
+ map = info->chmap[hcp->chmap_idx].map;
|
||||
|
||||
for (i = 0; i < info->max_channels; i++) {
|
||||
if (hcp->chmap_idx == HDMI_CODEC_CHMAP_IDX_UNKNOWN)
|
||||
--
|
||||
2.7.4
|
||||
|
||||
71
patch/kernel/meson64-dev/0069-fix.patch
Normal file
71
patch/kernel/meson64-dev/0069-fix.patch
Normal file
@ -0,0 +1,71 @@
|
||||
From 12c5dbdae16c4cd2d9914b7a4e31275f3d2070c6 Mon Sep 17 00:00:00 2001
|
||||
From: balbes150 <balbes-150@yandex.ru>
|
||||
Date: Mon, 18 Mar 2019 17:40:57 +0300
|
||||
Subject: [PATCH 69/91] fix
|
||||
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 1 +
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c | 1 +
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 2 ++
|
||||
include/linux/mmc/sdio_ids.h | 1 +
|
||||
4 files changed, 5 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
|
||||
index d64bf23..0e80530 100644
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
|
||||
@@ -982,6 +982,7 @@ static const struct sdio_device_id brcmf_sdmmc_ids[] = {
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43455),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4354),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4356),
|
||||
+ BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4359),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_CYPRESS_4373),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_CYPRESS_43012),
|
||||
{ /* end: all zeroes */ }
|
||||
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
|
||||
index 22534bf..1461794 100644
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
|
||||
@@ -1348,6 +1348,7 @@ bool brcmf_chip_sr_capable(struct brcmf_chip *pub)
|
||||
switch (pub->chip) {
|
||||
case BRCM_CC_4354_CHIP_ID:
|
||||
case BRCM_CC_4356_CHIP_ID:
|
||||
+ case BRCM_CC_4359_CHIP_ID:
|
||||
case BRCM_CC_4345_CHIP_ID:
|
||||
/* explicitly check SR engine enable bit */
|
||||
pmu_cc3_mask = BIT(2);
|
||||
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
index 0cd5b8d..7809aa1 100644
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -624,6 +624,7 @@ BRCMF_FW_DEF(43430A1, "brcmfmac43430-sdio");
|
||||
BRCMF_FW_DEF(43455, "brcmfmac43455-sdio");
|
||||
BRCMF_FW_DEF(4354, "brcmfmac4354-sdio");
|
||||
BRCMF_FW_DEF(4356, "brcmfmac4356-sdio");
|
||||
+BRCMF_FW_DEF(4359, "brcmfmac4359-sdio");
|
||||
BRCMF_FW_DEF(4373, "brcmfmac4373-sdio");
|
||||
BRCMF_FW_DEF(43012, "brcmfmac43012-sdio");
|
||||
|
||||
@@ -645,6 +646,7 @@ static const struct brcmf_firmware_mapping brcmf_sdio_fwnames[] = {
|
||||
BRCMF_FW_ENTRY(BRCM_CC_4345_CHIP_ID, 0xFFFFFFC0, 43455),
|
||||
BRCMF_FW_ENTRY(BRCM_CC_4354_CHIP_ID, 0xFFFFFFFF, 4354),
|
||||
BRCMF_FW_ENTRY(BRCM_CC_4356_CHIP_ID, 0xFFFFFFFF, 4356),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_4359_CHIP_ID, 0xFFFFFFFF, 4359),
|
||||
BRCMF_FW_ENTRY(CY_CC_4373_CHIP_ID, 0xFFFFFFFF, 4373),
|
||||
BRCMF_FW_ENTRY(CY_CC_43012_CHIP_ID, 0xFFFFFFFF, 43012)
|
||||
};
|
||||
diff --git a/include/linux/mmc/sdio_ids.h b/include/linux/mmc/sdio_ids.h
|
||||
index 4332199..93a5ac7 100644
|
||||
--- a/include/linux/mmc/sdio_ids.h
|
||||
+++ b/include/linux/mmc/sdio_ids.h
|
||||
@@ -41,6 +41,7 @@
|
||||
#define SDIO_DEVICE_ID_BROADCOM_43455 0xa9bf
|
||||
#define SDIO_DEVICE_ID_BROADCOM_4354 0x4354
|
||||
#define SDIO_DEVICE_ID_BROADCOM_4356 0x4356
|
||||
+#define SDIO_DEVICE_ID_BROADCOM_4359 0x4359
|
||||
#define SDIO_DEVICE_ID_CYPRESS_4373 0x4373
|
||||
#define SDIO_DEVICE_ID_CYPRESS_43012 43012
|
||||
|
||||
--
|
||||
2.7.4
|
||||
|
||||
85
patch/kernel/meson64-dev/0076-simple-framebuffer.patch
Normal file
85
patch/kernel/meson64-dev/0076-simple-framebuffer.patch
Normal file
@ -0,0 +1,85 @@
|
||||
From d7e9d1019dce94a26dcf1ad8ecb5c6411523b32f Mon Sep 17 00:00:00 2001
|
||||
From: Nick <nick@khadas.com>
|
||||
Date: Mon, 25 Mar 2019 10:53:44 +0800
|
||||
Subject: [PATCH 76/91] simple framebuffer
|
||||
|
||||
---
|
||||
arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi | 25 +++++++++++++++++++++++++
|
||||
arch/arm64/boot/dts/amlogic/meson-gxl.dtsi | 25 +++++++++++++++++++++++++
|
||||
2 files changed, 50 insertions(+)
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi b/arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi
|
||||
index 7862a6e..4dc7948 100644
|
||||
--- a/arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi
|
||||
+++ b/arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi
|
||||
@@ -13,6 +13,31 @@
|
||||
/ {
|
||||
compatible = "amlogic,meson-gxbb";
|
||||
|
||||
+ chosen {
|
||||
+ #address-cells = <2>;
|
||||
+ #size-cells = <2>;
|
||||
+ ranges;
|
||||
+
|
||||
+ framebuffer@0 {
|
||||
+ compatible = "amlogic,simple-framebuffer",
|
||||
+ "simple-framebuffer";
|
||||
+ amlogic,pipeline = "vpu-cvbs";
|
||||
+ power-domains = <&pwrc_vpu>;
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+
|
||||
+ framebuffer@1 {
|
||||
+ compatible = "amlogic,simple-framebuffer",
|
||||
+ "simple-framebuffer";
|
||||
+ amlogic,pipeline = "vpu-hdmi";
|
||||
+ clocks = <&clkc CLKID_HDMI_PCLK>,
|
||||
+ <&clkc CLKID_CLK81>,
|
||||
+ <&clkc CLKID_GCLK_VENCI_INT0>;
|
||||
+ power-domains = <&pwrc_vpu>;
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
soc {
|
||||
usb0_phy: phy@c0000000 {
|
||||
compatible = "amlogic,meson-gxbb-usb2-phy";
|
||||
diff --git a/arch/arm64/boot/dts/amlogic/meson-gxl.dtsi b/arch/arm64/boot/dts/amlogic/meson-gxl.dtsi
|
||||
index 0314c6ba2..ebef152 100644
|
||||
--- a/arch/arm64/boot/dts/amlogic/meson-gxl.dtsi
|
||||
+++ b/arch/arm64/boot/dts/amlogic/meson-gxl.dtsi
|
||||
@@ -13,6 +13,31 @@
|
||||
/ {
|
||||
compatible = "amlogic,meson-gxl";
|
||||
|
||||
+ chosen {
|
||||
+ #address-cells = <2>;
|
||||
+ #size-cells = <2>;
|
||||
+ ranges;
|
||||
+
|
||||
+ framebuffer@0 {
|
||||
+ compatible = "amlogic,simple-framebuffer",
|
||||
+ "simple-framebuffer";
|
||||
+ amlogic,pipeline = "vpu-cvbs";
|
||||
+ power-domains = <&pwrc_vpu>;
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+
|
||||
+ framebuffer@1 {
|
||||
+ compatible = "amlogic,simple-framebuffer",
|
||||
+ "simple-framebuffer";
|
||||
+ amlogic,pipeline = "vpu-hdmi";
|
||||
+ clocks = <&clkc CLKID_HDMI_PCLK>,
|
||||
+ <&clkc CLKID_CLK81>,
|
||||
+ <&clkc CLKID_GCLK_VENCI_INT0>;
|
||||
+ power-domains = <&pwrc_vpu>;
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
soc {
|
||||
usb0: usb@c9000000 {
|
||||
status = "disabled";
|
||||
--
|
||||
2.7.4
|
||||
|
||||
25
patch/kernel/meson64-dev/0078-VIM1-fixup-btbcm.patch
Normal file
25
patch/kernel/meson64-dev/0078-VIM1-fixup-btbcm.patch
Normal file
@ -0,0 +1,25 @@
|
||||
From 198ba00ac6a46645a083baad7ddca790a3a1cb94 Mon Sep 17 00:00:00 2001
|
||||
From: Nick <nick@khadas.com>
|
||||
Date: Mon, 25 Mar 2019 10:58:49 +0800
|
||||
Subject: [PATCH 78/91] VIM1: fixup btbcm
|
||||
|
||||
---
|
||||
drivers/bluetooth/btbcm.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/bluetooth/btbcm.c b/drivers/bluetooth/btbcm.c
|
||||
index d5d6e6e..244ca4d 100644
|
||||
--- a/drivers/bluetooth/btbcm.c
|
||||
+++ b/drivers/bluetooth/btbcm.c
|
||||
@@ -337,7 +337,7 @@ static const struct bcm_subver_table bcm_uart_subver_table[] = {
|
||||
{ 0x6109, "BCM4335C0" }, /* 003.001.009 */
|
||||
{ 0x610c, "BCM4354" }, /* 003.001.012 */
|
||||
{ 0x2122, "BCM4343A0" }, /* 001.001.034 */
|
||||
- { 0x2209, "BCM43430A1" }, /* 001.002.009 */
|
||||
+ { 0x2209, "BCM43438A1" }, /* 001.002.009 */
|
||||
{ 0x6119, "BCM4345C0" }, /* 003.001.025 */
|
||||
{ 0x230f, "BCM4356A2" }, /* 001.003.015 */
|
||||
{ 0x220e, "BCM20702A1" }, /* 001.002.014 */
|
||||
--
|
||||
2.7.4
|
||||
|
||||
Loading…
Reference in New Issue
Block a user