linux: update to linux-4.8.1

This commit is contained in:
MilhouseVH 2016-10-13 01:20:28 +01:00
parent d57f557dfc
commit 1b10b09d41
24 changed files with 240 additions and 346 deletions

View File

@ -60,7 +60,7 @@ case "$LINUX" in
PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET imx6-status-led imx6-soc-fan irqbalanced"
;;
*)
PKG_VERSION="4.7.6"
PKG_VERSION="4.8.1"
PKG_URL="http://www.kernel.org/pub/linux/kernel/v4.x/$PKG_NAME-$PKG_VERSION.tar.xz"
;;
esac

View File

@ -1,51 +0,0 @@
From: cvh <namerp@googlemail.com>
Date: Sun, 29 May 2016 23:00:40 +0200
Subject: [PATCH] [media] Add support for Terratec Cinergy S2 Rev.3
---
drivers/media/usb/dvb-usb/dw2102.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw2102.c
index 49b55d7..961f64e 100644
--- a/drivers/media/usb/dvb-usb/dw2102.c
+++ b/drivers/media/usb/dvb-usb/dw2102.c
@@ -1641,6 +1641,7 @@ enum dw2102_table_entry {
TEVII_S421,
TEVII_S632,
TERRATEC_CINERGY_S2_R2,
+ TERRATEC_CINERGY_S2_R3,
GOTVIEW_SAT_HD,
GENIATECH_T220,
TECHNOTREND_S2_4600,
@@ -1669,6 +1670,7 @@ static struct usb_device_id dw2102_table[] = {
[TEVII_S421] = {USB_DEVICE(0x9022, USB_PID_TEVII_S421)},
[TEVII_S632] = {USB_DEVICE(0x9022, USB_PID_TEVII_S632)},
[TERRATEC_CINERGY_S2_R2] = {USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_S2_R2)},
+ [TERRATEC_CINERGY_S2_R3] = {USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_S2_R3)},
[GOTVIEW_SAT_HD] = {USB_DEVICE(0x1FE1, USB_PID_GOTVIEW_SAT_HD)},
[GENIATECH_T220] = {USB_DEVICE(0x1f4d, 0xD220)},
[TECHNOTREND_S2_4600] = {USB_DEVICE(USB_VID_TECHNOTREND,
@@ -2083,7 +2085,7 @@ static struct dvb_usb_device_properties su3000_properties = {
}},
}
},
- .num_device_descs = 5,
+ .num_device_descs = 6,
.devices = {
{ "SU3000HD DVB-S USB2.0",
{ &dw2102_table[GENIATECH_SU3000], NULL },
@@ -2101,6 +2103,10 @@ static struct dvb_usb_device_properties su3000_properties = {
{ &dw2102_table[TERRATEC_CINERGY_S2_R2], NULL },
{ NULL },
},
+ { "Terratec Cinergy S2 USB HD Rev.3",
+ { &dw2102_table[TERRATEC_CINERGY_S2_R3], NULL },
+ { NULL },
+ },
{ "GOTVIEW Satellite HD",
{ &dw2102_table[GOTVIEW_SAT_HD], NULL },
{ NULL },
--
2.7.4

View File

@ -1,51 +1,3 @@
drivers/media/dvb-core/Makefile | 2 +-
drivers/media/dvb-core/dvb_ca_en50221.c | 128 +-
drivers/media/dvb-core/dvb_ca_en50221.h | 7 +
drivers/media/dvb-core/dvb_frontend.c | 15 +
drivers/media/dvb-core/dvb_frontend.h | 4 +
drivers/media/dvb-core/dvb_netstream.c | 259 +
drivers/media/dvb-core/dvb_netstream.h | 93 +
drivers/media/dvb-core/dvbdev.c | 3 +-
drivers/media/dvb-core/dvbdev.h | 4 +
drivers/media/dvb-frontends/Kconfig | 41 +
drivers/media/dvb-frontends/Makefile | 5 +
drivers/media/dvb-frontends/cxd2843.c | 2063 ++++++++
drivers/media/dvb-frontends/cxd2843.h | 30 +
drivers/media/dvb-frontends/mxl5xx.c | 1738 +++++++
drivers/media/dvb-frontends/mxl5xx.h | 39 +
drivers/media/dvb-frontends/mxl5xx_defs.h | 818 ++++
drivers/media/dvb-frontends/mxl5xx_regs.h | 941 ++++
drivers/media/dvb-frontends/stv0367dd.c | 1874 +++++++
drivers/media/dvb-frontends/stv0367dd.h | 31 +
drivers/media/dvb-frontends/stv0367dd_regs.h | 3429 +++++++++++++
drivers/media/dvb-frontends/stv0910.c | 1526 ++++++
drivers/media/dvb-frontends/stv0910.h | 31 +
drivers/media/dvb-frontends/stv0910_regs.h | 3997 +++++++++++++++
drivers/media/dvb-frontends/stv6111.c | 684 +++
drivers/media/dvb-frontends/stv6111.h | 20 +
drivers/media/pci/ddbridge/Kconfig | 29 +-
drivers/media/pci/ddbridge/Makefile | 4 +-
drivers/media/pci/ddbridge/ddbridge-core.c | 5105 +++++++++++++++-----
drivers/media/pci/ddbridge/ddbridge-i2c.c | 290 ++
drivers/media/pci/ddbridge/ddbridge-i2c.h | 116 +
drivers/media/pci/ddbridge/ddbridge-mod.c | 1118 +++++
drivers/media/pci/ddbridge/ddbridge-ns.c | 491 ++
drivers/media/pci/ddbridge/ddbridge-regs.h | 355 +-
drivers/media/pci/ddbridge/ddbridge.c | 541 +++
drivers/media/pci/ddbridge/ddbridge.h | 579 ++-
drivers/media/pci/ddbridge/octonet.c | 262 +
.../media/platform/sti/c8sectpfe/c8sectpfe-dvb.c | 1 +
drivers/media/tuners/tda18212.c | 5 +
drivers/media/tuners/tda18212.h | 7 +
drivers/media/usb/dvb-usb-v2/anysee.c | 2 +
drivers/media/usb/em28xx/em28xx-dvb.c | 1 +
drivers/staging/media/cxd2099/cxd2099.c | 234 +-
drivers/staging/media/cxd2099/cxd2099.h | 6 +-
include/uapi/linux/dvb/frontend.h | 7 +-
include/uapi/linux/dvb/mod.h | 22 +
include/uapi/linux/dvb/ns.h | 69 +
46 files changed, 25615 insertions(+), 1411 deletions(-)
diff --git a/drivers/media/dvb-core/Makefile b/drivers/media/dvb-core/Makefile
index 8f22bcd..5ff851a 100644
--- a/drivers/media/dvb-core/Makefile
@ -59,10 +11,10 @@ index 8f22bcd..5ff851a 100644
obj-$(CONFIG_DVB_CORE) += dvb-core.o
diff --git a/drivers/media/dvb-core/dvb_ca_en50221.c b/drivers/media/dvb-core/dvb_ca_en50221.c
index f82cd1f..4849156 100644
index b5b5b19..2cb8415 100644
--- a/drivers/media/dvb-core/dvb_ca_en50221.c
+++ b/drivers/media/dvb-core/dvb_ca_en50221.c
@@ -315,7 +315,7 @@ static int dvb_ca_en50221_link_init(struct dvb_ca_private *ca, int slot)
@@ -344,7 +344,7 @@ static int dvb_ca_en50221_link_init(struct dvb_ca_private *ca, int slot)
/* read the buffer size from the CAM */
if ((ret = ca->pub->write_cam_control(ca->pub, slot, CTRLIF_COMMAND, IRQEN | CMDREG_SR)) != 0)
return ret;
@ -71,7 +23,7 @@ index f82cd1f..4849156 100644
return ret;
if ((ret = dvb_ca_en50221_read_data(ca, slot, buf, 2)) != 2)
return -EIO;
@@ -612,65 +612,78 @@ static int dvb_ca_en50221_read_data(struct dvb_ca_private *ca, int slot, u8 * eb
@@ -641,65 +641,78 @@ static int dvb_ca_en50221_read_data(struct dvb_ca_private *ca, int slot, u8 * eb
}
}
@ -200,7 +152,7 @@ index f82cd1f..4849156 100644
}
/* OK, add it to the receive buffer, or copy into external buffer if supplied */
@@ -722,6 +735,9 @@ static int dvb_ca_en50221_write_data(struct dvb_ca_private *ca, int slot, u8 * b
@@ -751,6 +764,9 @@ static int dvb_ca_en50221_write_data(struct dvb_ca_private *ca, int slot, u8 * b
if (bytes_write > ca->slot_info[slot].link_buf_size)
return -EINVAL;
@ -210,7 +162,7 @@ index f82cd1f..4849156 100644
/* it is possible we are dealing with a single buffer implementation,
thus if there is data available for read or if there is even a read
already in progress, we do nothing but awake the kernel thread to
@@ -1057,7 +1073,8 @@ static int dvb_ca_en50221_thread(void *data)
@@ -1086,7 +1102,8 @@ static int dvb_ca_en50221_thread(void *data)
printk("dvb_ca adapter %d: Invalid PC card inserted :(\n",
ca->dvbdev->adapter->num);
@ -220,7 +172,7 @@ index f82cd1f..4849156 100644
dvb_ca_en50221_thread_update_delay(ca);
break;
}
@@ -1087,7 +1104,10 @@ static int dvb_ca_en50221_thread(void *data)
@@ -1116,7 +1133,10 @@ static int dvb_ca_en50221_thread(void *data)
if (time_after(jiffies, ca->slot_info[slot].timeout)) {
printk("dvb_ca adapter %d: DVB CAM did not respond :(\n",
ca->dvbdev->adapter->num);
@ -232,7 +184,7 @@ index f82cd1f..4849156 100644
dvb_ca_en50221_thread_update_delay(ca);
break;
}
@@ -1113,7 +1133,7 @@ static int dvb_ca_en50221_thread(void *data)
@@ -1142,7 +1162,7 @@ static int dvb_ca_en50221_thread(void *data)
}
printk("dvb_ca adapter %d: DVB CAM link initialisation failed :(\n", ca->dvbdev->adapter->num);
@ -267,10 +219,10 @@ index 1e4bbbd..056d10c 100644
int (*slot_shutdown)(struct dvb_ca_en50221 *ca, int slot);
int (*slot_ts_enable)(struct dvb_ca_en50221 *ca, int slot);
diff --git a/drivers/media/dvb-core/dvb_frontend.c b/drivers/media/dvb-core/dvb_frontend.c
index c014261..6047f4f 100644
index be99c8d..254f89d 100644
--- a/drivers/media/dvb-core/dvb_frontend.c
+++ b/drivers/media/dvb-core/dvb_frontend.c
@@ -1019,6 +1019,7 @@ static struct dtv_cmds_h dtv_cmds[DTV_MAX_COMMAND + 1] = {
@@ -1037,6 +1037,7 @@ static struct dtv_cmds_h dtv_cmds[DTV_MAX_COMMAND + 1] = {
_DTV_CMD(DTV_STREAM_ID, 1, 0),
_DTV_CMD(DTV_DVBT2_PLP_ID_LEGACY, 1, 0),
_DTV_CMD(DTV_LNA, 1, 0),
@ -278,7 +230,7 @@ index c014261..6047f4f 100644
/* Get */
_DTV_CMD(DTV_DISEQC_SLAVE_REPLY, 0, 1),
@@ -1449,6 +1450,14 @@ static int dtv_property_process_get(struct dvb_frontend *fe,
@@ -1467,6 +1468,14 @@ static int dtv_property_process_get(struct dvb_frontend *fe,
tvp->u.data = c->lna;
break;
@ -293,7 +245,7 @@ index c014261..6047f4f 100644
/* Fill quality measures */
case DTV_STAT_SIGNAL_STRENGTH:
tvp->u.st = c->strength;
@@ -1884,6 +1893,12 @@ static int dtv_property_process_set(struct dvb_frontend *fe,
@@ -1902,6 +1911,12 @@ static int dtv_property_process_set(struct dvb_frontend *fe,
c->lna = LNA_AUTO;
break;
@ -307,10 +259,10 @@ index c014261..6047f4f 100644
return -EINVAL;
}
diff --git a/drivers/media/dvb-core/dvb_frontend.h b/drivers/media/dvb-core/dvb_frontend.h
index 9592573..c93aff5 100644
index fb6e848..3efb21b 100644
--- a/drivers/media/dvb-core/dvb_frontend.h
+++ b/drivers/media/dvb-core/dvb_frontend.h
@@ -471,6 +471,7 @@ struct dvb_frontend_ops {
@@ -452,6 +452,7 @@ struct dvb_frontend_ops {
int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable);
int (*ts_bus_ctrl)(struct dvb_frontend* fe, int acquire);
int (*set_lna)(struct dvb_frontend *);
@ -318,7 +270,7 @@ index 9592573..c93aff5 100644
/*
* These callbacks are for devices that implement their own
@@ -483,6 +484,8 @@ struct dvb_frontend_ops {
@@ -464,6 +465,8 @@ struct dvb_frontend_ops {
int (*set_property)(struct dvb_frontend* fe, struct dtv_property* tvp);
int (*get_property)(struct dvb_frontend* fe, struct dtv_property* tvp);
@ -327,7 +279,7 @@ index 9592573..c93aff5 100644
};
#ifdef __DVB_CORE__
@@ -632,6 +635,7 @@ struct dtv_frontend_properties {
@@ -613,6 +616,7 @@ struct dtv_frontend_properties {
u8 atscmh_sccc_code_mode_d;
u32 lna;
@ -712,7 +664,7 @@ index 75a3f4b..3f309b4 100644
};
#ifdef CONFIG_DVB_DYNAMIC_MINORS
@@ -900,6 +900,7 @@ out:
@@ -900,6 +900,7 @@ int dvb_usercopy(struct file *file,
kfree(mbuf);
return err;
}
@ -736,7 +688,7 @@ index 4aff7bd..ae4f4d1 100644
#define DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr) \
static short adapter_nr[] = \
diff --git a/drivers/media/dvb-frontends/Kconfig b/drivers/media/dvb-frontends/Kconfig
index a82f77c..3692927 100644
index c645aa8..f5ff222 100644
--- a/drivers/media/dvb-frontends/Kconfig
+++ b/drivers/media/dvb-frontends/Kconfig
@@ -28,6 +28,14 @@ config DVB_STV090x
@ -776,7 +728,7 @@ index a82f77c..3692927 100644
config DVB_M88DS3103
tristate "Montage Technology M88DS3103"
depends on DVB_CORE && I2C && I2C_MUX
@@ -81,6 +104,24 @@ config DVB_MN88473
@@ -89,6 +112,24 @@ config DVB_MN88473
help
Say Y when you want to support this frontend.
@ -802,10 +754,10 @@ index a82f77c..3692927 100644
depends on DVB_CORE
diff --git a/drivers/media/dvb-frontends/Makefile b/drivers/media/dvb-frontends/Makefile
index eb7191f..1749be8 100644
index e90165a..d3fed98 100644
--- a/drivers/media/dvb-frontends/Makefile
+++ b/drivers/media/dvb-frontends/Makefile
@@ -110,6 +110,11 @@ obj-$(CONFIG_DVB_CXD2820R) += cxd2820r.o
@@ -111,6 +111,11 @@ obj-$(CONFIG_DVB_CXD2820R) += cxd2820r.o
obj-$(CONFIG_DVB_CXD2841ER) += cxd2841er.o
obj-$(CONFIG_DVB_DRXK) += drxk.o
obj-$(CONFIG_DVB_TDA18271C2DD) += tda18271c2dd.o
@ -2924,10 +2876,10 @@ index 0000000..2467a6b
+#endif /* _CXD2843_H_ */
diff --git a/drivers/media/dvb-frontends/mxl5xx.c b/drivers/media/dvb-frontends/mxl5xx.c
new file mode 100644
index 0000000..29bebed
index 0000000..4413fd2
--- /dev/null
+++ b/drivers/media/dvb-frontends/mxl5xx.c
@@ -0,0 +1,1738 @@
@@ -0,0 +1,1749 @@
+/*
+ * Driver for the Maxlinear MX58x family of tuners/demods
+ *
@ -3382,53 +3334,6 @@ index 0000000..29bebed
+ return stat;
+}
+
+static int get_stats(struct dvb_frontend *fe);
+
+static int read_status(struct dvb_frontend *fe, enum fe_status *status)
+{
+ struct mxl *state = fe->demodulator_priv;
+
+ int stat;
+ u32 regData = 0;
+
+ mutex_lock(&state->base->status_lock);
+ HYDRA_DEMOD_STATUS_LOCK(state, state->demod);
+ stat = read_register(state, (HYDRA_DMD_LOCK_STATUS_ADDR_OFFSET +
+ HYDRA_DMD_STATUS_OFFSET(state->demod)),
+ &regData);
+ HYDRA_DEMOD_STATUS_UNLOCK(state, state->demod);
+ mutex_unlock(&state->base->status_lock);
+
+ *status = (regData == 1) ? 0x1f : 0;
+ get_stats(fe);
+ return stat;
+}
+
+static int tune(struct dvb_frontend *fe, bool re_tune,
+ unsigned int mode_flags,
+ unsigned int *delay, enum fe_status *status)
+{
+ struct mxl *state = fe->demodulator_priv;
+ int r = 0;
+
+ *delay = HZ / 2;
+ if (re_tune) {
+ r = set_parameters(fe);
+ if (r)
+ return r;
+ state->tune_time = jiffies;
+ return 0;
+ }
+ if (*status & FE_HAS_LOCK)
+ return 0;
+
+ r = read_status(fe, status);
+ if (r)
+ return r;
+
+ return 0;
+}
+
+static int enable_tuner(struct mxl *state, u32 tuner, u32 enable);
+
+static int sleep(struct dvb_frontend *fe)
@ -3465,10 +3370,14 @@ index 0000000..29bebed
+ &regData);
+ HYDRA_DEMOD_STATUS_UNLOCK(state, state->demod);
+ mutex_unlock(&state->base->status_lock);
+ *snr = (s16) (regData & 0xFFFF); /* 100x dB */
+
+ p->cnr.len = 1;
+ p->cnr.stat[0].scale = FE_SCALE_DECIBEL;
+ p->cnr.stat[0].uvalue = 10 * (s64) *snr;
+ p->cnr.stat[0].svalue = (s16)regData * 10;
+
+ if (regData > 2000) regData = 2000;
+ *snr = (s16)(regData/10) * 328; /* 20dB = 100% */
+
+ return stat;
+}
+
@ -3476,52 +3385,64 @@ index 0000000..29bebed
+{
+ struct mxl *state = fe->demodulator_priv;
+ struct dtv_frontend_properties *p = &fe->dtv_property_cache;
+ u32 reg[8], reg2[4];
+ u32 reg[8];
+ int stat;
+
+ *ber = 0;
+ mutex_lock(&state->base->status_lock);
+ HYDRA_DEMOD_STATUS_LOCK(state, state->demod);
+ stat = read_register_block(state,
+ (HYDRA_DMD_DVBS_1ST_CORR_RS_ERRORS_ADDR_OFFSET +
+ HYDRA_DMD_STATUS_OFFSET(state->demod)),
+ (4 * sizeof(u32)),
+ (u8 *) &reg[0]);
+ HYDRA_DEMOD_STATUS_UNLOCK(state, state->demod);
+
+ switch (p->delivery_system) {
+ case SYS_DSS:
+ case SYS_DVBS:
+ p->pre_bit_error.len = 1;
+ p->pre_bit_error.stat[0].scale = FE_SCALE_COUNTER;
+ p->pre_bit_error.stat[0].uvalue = reg[2];
+ p->pre_bit_count.len = 1;
+ p->pre_bit_count.stat[0].scale = FE_SCALE_COUNTER;
+ p->pre_bit_count.stat[0].uvalue = reg[3];
+ break;
+ default:
+ break;
+ }
+
+ stat = read_register_block(state,
+ (HYDRA_DMD_DVBS2_CRC_ERRORS_ADDR_OFFSET +
+ HYDRA_DMD_STATUS_OFFSET(state->demod)),
+ (7 * sizeof(u32)),
+ (u8 *) &reg[0]);
+ stat = read_register_block(state,
+ (HYDRA_DMD_DVBS_1ST_CORR_RS_ERRORS_ADDR_OFFSET +
+ HYDRA_DMD_STATUS_OFFSET(state->demod)),
+ (4 * sizeof(u32)),
+ (u8 *) &reg2[0]);
+ HYDRA_DEMOD_STATUS_UNLOCK(state, state->demod);
+ mutex_unlock(&state->base->status_lock);
+
+
+ switch (p->delivery_system) {
+ case SYS_DSS:
+ break;
+ case SYS_DVBS:
+ p->pre_bit_error.len = 1;
+ p->pre_bit_error.stat[0].scale = FE_SCALE_COUNTER;
+ p->pre_bit_error.stat[0].uvalue = reg[5];
+ p->pre_bit_count.len = 1;
+ p->pre_bit_count.stat[0].scale = FE_SCALE_COUNTER;
+ p->pre_bit_count.stat[0].uvalue = reg[6] * 188 * 8;
+ p->post_bit_error.len = 1;
+ p->post_bit_error.stat[0].scale = FE_SCALE_COUNTER;
+ p->post_bit_error.stat[0].uvalue = reg[5];
+ p->post_bit_count.len = 1;
+ p->post_bit_count.stat[0].scale = FE_SCALE_COUNTER;
+ p->post_bit_count.stat[0].uvalue = reg[6];
+ break;
+ case SYS_DVBS2:
+ p->post_bit_error.len = 1;
+ p->post_bit_error.stat[0].scale = FE_SCALE_COUNTER;
+ p->post_bit_error.stat[0].uvalue = reg[1];
+ p->post_bit_count.len = 1;
+ p->post_bit_count.stat[0].scale = FE_SCALE_COUNTER;
+ p->post_bit_count.stat[0].uvalue = reg[2];
+ break;
+ default:
+ break;
+ }
+ pr_debug("ber %08x %08x %08x %08x %08x %08x %08x\n",
+ reg[0], reg[1], reg[2], reg[3], reg[4], reg[5], reg[6]);
+ pr_debug("ber2 %08x %08x %08x %08x\n",
+ reg[0], reg[1], reg[2], reg[3]);
+ /*
+ * pre_bit_error, pre_bit_count
+ * post_bit_error, post_bit_count;
+ * block_error block_count;
+ * reset_fec_counter(state);
+ */
+
+ *ber = p->post_bit_error.stat[0].uvalue;
+
+ mutex_unlock(&state->base->status_lock);
+
+ return 0;
+}
+
@ -3539,10 +3460,12 @@ index 0000000..29bebed
+ &regData);
+ HYDRA_DEMOD_STATUS_UNLOCK(state, state->demod);
+ mutex_unlock(&state->base->status_lock);
+ *strength = (u16) (regData & 0xFFFF); /* 10x dBm */
+
+ p->strength.len = 1;
+ p->strength.stat[0].scale = FE_SCALE_DECIBEL;
+ p->strength.stat[0].uvalue = 10 * (s64) (s16) (regData & 0xFFFF);
+ p->strength.stat[0].svalue = (s16)regData *10;
+
+ *strength = (100 + (s16)regData/100) * 656;
+ return stat;
+}
+
@ -3551,14 +3474,54 @@ index 0000000..29bebed
+ return 0;
+}
+
+static int get_stats(struct dvb_frontend *fe)
+static int read_status(struct dvb_frontend *fe, enum fe_status *status)
+{
+ u16 val;
+ u32 val32;
+ struct mxl *state = fe->demodulator_priv;
+
+ int stat;
+ u32 regData = 0;
+ u16 val;
+
+ mutex_lock(&state->base->status_lock);
+ HYDRA_DEMOD_STATUS_LOCK(state, state->demod);
+ stat = read_register(state, (HYDRA_DMD_LOCK_STATUS_ADDR_OFFSET +
+ HYDRA_DMD_STATUS_OFFSET(state->demod)),
+ &regData);
+ HYDRA_DEMOD_STATUS_UNLOCK(state, state->demod);
+ mutex_unlock(&state->base->status_lock);
+
+ *status = (regData == 1) ? 0x1f : 0;
+ read_signal_strength(fe, &val);
+ read_snr(fe, &val);
+ read_ber(fe, &val32);
+ if (*status) {
+ read_snr(fe, &val);
+ read_ber(fe, &regData);
+ }
+
+ return 0;
+}
+
+static int tune(struct dvb_frontend *fe, bool re_tune,
+ unsigned int mode_flags,
+ unsigned int *delay, enum fe_status *status)
+{
+ struct mxl *state = fe->demodulator_priv;
+ int r = 0;
+
+ *delay = HZ / 2;
+ if (re_tune) {
+ r = set_parameters(fe);
+ if (r)
+ return r;
+ state->tune_time = jiffies;
+ return 0;
+ }
+ if (*status & FE_HAS_LOCK)
+ return 0;
+
+ r = read_status(fe, status);
+ if (r)
+ return r;
+
+ return 0;
+}
+
@ -18189,7 +18152,7 @@ index 7446c8b..28e89f0 100644
ccflags-y += -Idrivers/media/dvb-core/
ccflags-y += -Idrivers/media/dvb-frontends/
diff --git a/drivers/media/pci/ddbridge/ddbridge-core.c b/drivers/media/pci/ddbridge/ddbridge-core.c
index 6e995ef..82c1938 100644
index 47def73..82c1938 100644
--- a/drivers/media/pci/ddbridge/ddbridge-core.c
+++ b/drivers/media/pci/ddbridge/ddbridge-core.c
@@ -1,7 +1,10 @@
@ -20069,7 +20032,7 @@ index 6e995ef..82c1938 100644
{
int ret;
@@ -759,1000 +1576,3010 @@ static int start_feed(struct dvb_demux_feed *dvbdmxfeed)
@@ -759,999 +1576,3010 @@ static int start_feed(struct dvb_demux_feed *dvbdmxfeed)
{
struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
struct ddb_input *input = dvbdmx->priv;
@ -23465,10 +23428,9 @@ index 6e995ef..82c1938 100644
- if (pci_enable_device(pdev) < 0)
- return -ENODEV;
-
- dev = vmalloc(sizeof(struct ddb));
- dev = vzalloc(sizeof(struct ddb));
- if (dev == NULL)
- return -ENOMEM;
- memset(dev, 0, sizeof(struct ddb));
-
- dev->pdev = pdev;
- pci_set_drvdata(pdev, dev);
@ -27881,7 +27843,7 @@ index ae917c0..02d22eb 100644
static struct cx24116_config anysee_cx24116_config = {
diff --git a/drivers/media/usb/em28xx/em28xx-dvb.c b/drivers/media/usb/em28xx/em28xx-dvb.c
index 1a5c012..335d16a 100644
index 8cedef0..7bc7778 100644
--- a/drivers/media/usb/em28xx/em28xx-dvb.c
+++ b/drivers/media/usb/em28xx/em28xx-dvb.c
@@ -376,6 +376,7 @@ static struct tda18271_config kworld_ub435q_v2_config = {

View File

@ -1,32 +1,20 @@
From 7fa7c0b24aa134d5fdb65dc2a984c734b499f70e Mon Sep 17 00:00:00 2001
From: fritsch <peter.fruehberger@gmail.com>
Date: Sun, 29 Nov 2015 16:38:14 +0100
Subject: [PATCH] Intel: Implement Video Color Range (testing)
---
drivers/gpu/drm/i915/i915_drv.h | 1 +
drivers/gpu/drm/i915/intel_drv.h | 8 ++++++++
drivers/gpu/drm/i915/intel_hdmi.c | 17 +++++++++++++++--
drivers/gpu/drm/i915/intel_modes.c | 1 +
4 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index a01e515..9e4b8d0 100644
index f68c789..a6b6dfe 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -3450,6 +3450,7 @@ int intel_freq_opcode(struct drm_i915_private *dev_priv, int val);
@@ -3948,6 +3948,7 @@ __raw_write(64, q)
#define INTEL_BROADCAST_RGB_AUTO 0
#define INTEL_BROADCAST_RGB_FULL 1
#define INTEL_BROADCAST_RGB_LIMITED 2
+#define INTEL_BROADCAST_RGB_VIDEO 3
static inline uint32_t i915_vgacntrl_reg(struct drm_device *dev)
static inline i915_reg_t i915_vgacntrl_reg(struct drm_device *dev)
{
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index f2a1142..210e7a7 100644
index ff399b9..f2ac0ff 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -372,6 +372,13 @@ struct intel_crtc_state {
@@ -522,6 +522,13 @@ struct intel_crtc_state {
*/
bool limited_color_range;
@ -37,11 +25,11 @@ index f2a1142..210e7a7 100644
+ */
+ bool video_color_range;
+
/* DP has a bunch of special case unfortunately, so mark the pipe
* accordingly. */
bool has_dp_encoder;
@@ -682,6 +689,7 @@ struct intel_hdmi {
int ddc_bus;
/* Bitmask of encoder types (enum intel_output_type)
* driven by the pipe.
*/
@@ -805,6 +812,7 @@ struct intel_hdmi {
} dp_dual_mode;
bool limited_color_range;
bool color_range_auto;
+ bool color_range_video;
@ -49,10 +37,10 @@ index f2a1142..210e7a7 100644
bool has_audio;
enum hdmi_force_audio force_audio;
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 81cdd9f..417f9be 100644
index 4df9f38..8b64508 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -464,7 +464,8 @@ static void intel_hdmi_set_avi_infoframe(struct drm_encoder *encoder,
@@ -462,7 +462,8 @@ static void intel_hdmi_set_avi_infoframe(struct drm_encoder *encoder,
}
if (intel_hdmi->rgb_quant_range_selectable) {
@ -62,16 +50,16 @@ index 81cdd9f..417f9be 100644
frame.avi.quantization_range =
HDMI_QUANTIZATION_RANGE_LIMITED;
else
@@ -1266,6 +1267,8 @@ bool intel_hdmi_compute_config(struct intel_encoder *encoder,
@@ -1308,6 +1309,8 @@ bool intel_hdmi_compute_config(struct intel_encoder *encoder,
pipe_config->limited_color_range =
intel_hdmi->limited_color_range;
}
+ if (intel_hdmi->color_range_video)
+ pipe_config->video_color_range = true;
+ pipe_config->video_color_range = true;
if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK) {
pipe_config->pixel_multiplier = 2;
@@ -1485,25 +1488,35 @@ intel_hdmi_set_property(struct drm_connector *connector,
@@ -1588,25 +1591,35 @@ intel_hdmi_set_property(struct drm_connector *connector,
if (property == dev_priv->broadcast_rgb_property) {
bool old_auto = intel_hdmi->color_range_auto;
bool old_range = intel_hdmi->limited_color_range;
@ -109,7 +97,7 @@ index 81cdd9f..417f9be 100644
goto done;
diff --git a/drivers/gpu/drm/i915/intel_modes.c b/drivers/gpu/drm/i915/intel_modes.c
index 38a4c8c..c49681a 100644
index f2584d0..5a6f853 100644
--- a/drivers/gpu/drm/i915/intel_modes.c
+++ b/drivers/gpu/drm/i915/intel_modes.c
@@ -103,6 +103,7 @@ static const struct drm_prop_enum_list broadcast_rgb_names[] = {
@ -120,5 +108,3 @@ index 38a4c8c..c49681a 100644
};
void
--
2.5.0

View File

@ -1,4 +1,4 @@
From d7c07ade8f6b82a3fd299e749f98381f3c3c2057 Mon Sep 17 00:00:00 2001
From 982a9c5bbe16cabc297e75d6d9e8d2926f5641b8 Mon Sep 17 00:00:00 2001
From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Date: Wed, 2 Mar 2016 14:30:44 -0600
Subject: [PATCH 01/12] drm: i915: remove intel_hdmi variable declaration
@ -12,10 +12,10 @@ Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index a884470..2adcc15 100644
index 4df9f38..34e497f 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -1514,7 +1514,7 @@ intel_hdmi_detect(struct drm_connector *connector, bool force)
@@ -1496,7 +1496,7 @@ intel_hdmi_detect(struct drm_connector *connector, bool force)
intel_hdmi_unset_edid(connector);
if (intel_hdmi_set_edid(connector, live_status)) {
@ -25,7 +25,7 @@ index a884470..2adcc15 100644
hdmi_to_dig_port(intel_hdmi)->base.type = INTEL_OUTPUT_HDMI;
status = connector_status_connected;
From 0dffccdf5025a92d38f18c1698e542a8bd2de903 Mon Sep 17 00:00:00 2001
From 9a4bb140fbca791441bcf93ddf0a2ae062bc9945 Mon Sep 17 00:00:00 2001
From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Date: Tue, 1 Mar 2016 16:25:04 -0600
Subject: [PATCH 02/12] drm/i915: Add headers for non-HDAudio HDMI interface
@ -43,10 +43,10 @@ Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
---
drivers/gpu/drm/i915/hdmi_audio_if.h | 125 +++++++++++++++++++++++++++++++++++
drivers/gpu/drm/i915/i915_drv.h | 32 +++++++++
drivers/gpu/drm/i915/i915_drv.h | 31 +++++++++
drivers/gpu/drm/i915/i915_reg.h | 22 ++++++
drivers/gpu/drm/i915/intel_drv.h | 13 ++++
4 files changed, 192 insertions(+)
4 files changed, 191 insertions(+)
create mode 100644 drivers/gpu/drm/i915/hdmi_audio_if.h
diff --git a/drivers/gpu/drm/i915/hdmi_audio_if.h b/drivers/gpu/drm/i915/hdmi_audio_if.h
@ -181,19 +181,18 @@ index 0000000..165bba5
+
+#endif /* __HDMI_AUDIO_IF_H */
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index bc3f2e6..7c2577d 100644
index f68c789..4c682fae 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -61,6 +61,8 @@
#include "i915_gem_gtt.h"
@@ -63,6 +63,7 @@
#include "i915_gem_render_state.h"
#include "intel_gvt.h"
+#include "hdmi_audio_if.h"
+
/* General customization:
*/
@@ -1165,6 +1167,18 @@ struct intel_gen6_power_mgmt {
@@ -1208,6 +1209,18 @@ struct intel_gen6_power_mgmt {
struct mutex hw_lock;
};
@ -212,7 +211,7 @@ index bc3f2e6..7c2577d 100644
/* defined intel_pm.c */
extern spinlock_t mchdev_lock;
@@ -1997,6 +2011,19 @@ struct drm_i915_private {
@@ -2066,6 +2079,19 @@ struct drm_i915_private {
struct intel_encoder *dig_port_map[I915_MAX_PORTS];
@ -232,7 +231,7 @@ index bc3f2e6..7c2577d 100644
/*
* NOTE: This is the dri1/ums dungeon, don't add stuff here. Your patch
* will be rejected. Instead look for a better place.
@@ -3634,6 +3661,11 @@ int intel_freq_opcode(struct drm_i915_private *dev_priv, int val);
@@ -3903,6 +3929,11 @@ int intel_freq_opcode(struct drm_i915_private *dev_priv, int val);
} while (upper != old_upper && loop++ < 2); \
(u64)upper << 32 | lower; })
@ -245,10 +244,10 @@ index bc3f2e6..7c2577d 100644
#define POSTING_READ16(reg) (void)I915_READ16_NOTRACE(reg)
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 3fcf7dd..d3e5935 100644
index bf2cad3..bb0378f2d 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -2113,7 +2113,25 @@ enum skl_disp_power_wells {
@@ -2131,7 +2131,25 @@ enum skl_disp_power_wells {
#define I915_WINVALID_INTERRUPT (1<<1)
#define I915_USER_INTERRUPT (1<<1)
#define I915_ASLE_INTERRUPT (1<<0)
@ -274,7 +273,7 @@ index 3fcf7dd..d3e5935 100644
#define GEN6_BSD_RNCID _MMIO(0x12198)
@@ -3433,6 +3451,9 @@ enum skl_disp_power_wells {
@@ -3468,6 +3486,9 @@ enum {
#define _GEN3_SDVOC 0x61160
#define GEN3_SDVOB _MMIO(_GEN3_SDVOB)
#define GEN3_SDVOC _MMIO(_GEN3_SDVOC)
@ -284,7 +283,7 @@ index 3fcf7dd..d3e5935 100644
#define GEN4_HDMIB GEN3_SDVOB
#define GEN4_HDMIC GEN3_SDVOC
#define VLV_HDMIB _MMIO(VLV_DISPLAY_BASE + 0x61140)
@@ -3442,6 +3463,7 @@ enum skl_disp_power_wells {
@@ -3477,6 +3498,7 @@ enum {
#define PCH_HDMIB PCH_SDVOB
#define PCH_HDMIC _MMIO(0xe1150)
#define PCH_HDMID _MMIO(0xe1160)
@ -293,10 +292,10 @@ index 3fcf7dd..d3e5935 100644
#define PORT_DFT_I9XX _MMIO(0x61150)
#define DC_BALANCE_RESET (1 << 25)
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index f7f0f01..2820ef2 100644
index ff399b9..83915b1 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -751,6 +751,14 @@ struct cxsr_latency {
@@ -796,6 +796,14 @@ struct cxsr_latency {
#define to_intel_plane_state(x) container_of(x, struct intel_plane_state, base)
#define intel_fb_obj(x) (x ? to_intel_framebuffer(x)->obj : NULL)
@ -311,7 +310,7 @@ index f7f0f01..2820ef2 100644
struct intel_hdmi {
i915_reg_t hdmi_reg;
int ddc_bus;
@@ -766,6 +774,9 @@ struct intel_hdmi {
@@ -811,6 +819,9 @@ struct intel_hdmi {
bool rgb_quant_range_selectable;
enum hdmi_picture_aspect aspect_ratio;
struct intel_connector *attached_connector;
@ -321,7 +320,7 @@ index f7f0f01..2820ef2 100644
void (*write_infoframe)(struct drm_encoder *encoder,
enum hdmi_infoframe_type type,
const void *frame, ssize_t len);
@@ -1196,6 +1207,8 @@ intel_rotation_90_or_270(unsigned int rotation)
@@ -1263,6 +1274,8 @@ intel_rotation_90_or_270(unsigned int rotation)
void intel_create_rotation_property(struct drm_device *dev,
struct intel_plane *plane);
@ -331,7 +330,7 @@ index f7f0f01..2820ef2 100644
void assert_pch_transcoder_disabled(struct drm_i915_private *dev_priv,
enum pipe pipe);
From fdb02b86d0cc7c9ec341efdc3086aa703637f2b6 Mon Sep 17 00:00:00 2001
From 0aca8e42f07b0f84970a39d7f91b33a9899001a9 Mon Sep 17 00:00:00 2001
From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Date: Tue, 1 Mar 2016 16:25:04 -0600
Subject: [PATCH 03/12] drm/i915: changes for non-HDAudio HDMI interface
@ -361,15 +360,15 @@ Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Toyo Abe <toyo.abe@gmail.com>
---
drivers/gpu/drm/i915/i915_irq.c | 169 +++++++++++++++++++++++++++-
drivers/gpu/drm/i915/intel_display.c | 103 ++++++++++++++++-
drivers/gpu/drm/i915/intel_hdmi.c | 211 ++++++++++++++++++++++++++++++++++-
3 files changed, 479 insertions(+), 4 deletions(-)
drivers/gpu/drm/i915/intel_display.c | 100 +++++++++++++++++
drivers/gpu/drm/i915/intel_hdmi.c | 212 ++++++++++++++++++++++++++++++++++-
3 files changed, 478 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index aab47f7..3ef0d14 100644
index 1c2aec3..93ad21e 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -603,6 +603,42 @@ i915_disable_pipestat(struct drm_i915_private *dev_priv, enum pipe pipe,
@@ -587,6 +587,42 @@ i915_disable_pipestat(struct drm_i915_private *dev_priv, enum pipe pipe,
__i915_disable_pipestat(dev_priv, pipe, enable_mask, status_mask);
}
@ -382,7 +381,7 @@ index aab47f7..3ef0d14 100644
+ mask = dev_priv->hdmi_audio_interrupt_mask;
+ mask |= I915_HDMI_AUDIO_UNDERRUN | I915_HDMI_AUDIO_BUFFER_DONE;
+ /* Enable the interrupt, clear any pending status */
+ if (IS_CHERRYVIEW(dev_priv->dev)) {
+ if (IS_CHERRYVIEW(dev_priv)) {
+ I915_WRITE(I915_LPE_AUDIO_HDMI_STATUS_C, mask);
+ POSTING_READ(I915_LPE_AUDIO_HDMI_STATUS_C);
+ } else {
@ -399,7 +398,7 @@ index aab47f7..3ef0d14 100644
+ mask = dev_priv->hdmi_audio_interrupt_mask;
+ mask |= I915_HDMI_AUDIO_UNDERRUN | I915_HDMI_AUDIO_BUFFER_DONE;
+ /* Disable the interrupt, clear any pending status */
+ if (IS_CHERRYVIEW(dev_priv->dev)) {
+ if (IS_CHERRYVIEW(dev_priv)) {
+ I915_WRITE(I915_LPE_AUDIO_HDMI_STATUS_C, mask);
+ POSTING_READ(I915_LPE_AUDIO_HDMI_STATUS_C);
+
@ -411,9 +410,9 @@ index aab47f7..3ef0d14 100644
+
/**
* i915_enable_asle_pipestat - enable ASLE pipestat for OpRegion
* @dev: drm device
@@ -1651,6 +1687,24 @@ static bool intel_pipe_handle_vblank(struct drm_device *dev, enum pipe pipe)
return true;
* @dev_priv: i915 device private
@@ -1618,6 +1654,24 @@ static bool intel_pipe_handle_vblank(struct drm_i915_private *dev_priv,
return ret;
}
+static inline
@ -434,15 +433,15 @@ index aab47f7..3ef0d14 100644
+ }
+}
+
static void valleyview_pipestat_irq_ack(struct drm_device *dev, u32 iir,
u32 pipe_stats[I915_MAX_PIPES])
static void valleyview_pipestat_irq_ack(struct drm_i915_private *dev_priv,
u32 iir, u32 pipe_stats[I915_MAX_PIPES])
{
@@ -1853,6 +1907,23 @@ static irqreturn_t valleyview_irq_handler(int irq, void *arg)
i9xx_hpd_irq_handler(dev, hotplug_status);
@@ -1817,6 +1871,23 @@ static irqreturn_t valleyview_irq_handler(int irq, void *arg)
i9xx_hpd_irq_handler(dev_priv, hotplug_status);
valleyview_pipestat_irq_handler(dev, pipe_stats);
valleyview_pipestat_irq_handler(dev_priv, pipe_stats);
+
+ if (IS_CHERRYVIEW(dev)) {
+ if (IS_CHERRYVIEW(dev_priv)) {
+ // FIXME: plb: why are pipes and status mapped this way?
+ if (iir & I915_LPE_PIPE_C_INTERRUPT)
+ i915_notify_audio_buffer_status(dev,
@ -461,12 +460,12 @@ index aab47f7..3ef0d14 100644
} while (0);
enable_rpm_wakeref_asserts(dev_priv);
@@ -1930,6 +2001,23 @@ static irqreturn_t cherryview_irq_handler(int irq, void *arg)
i9xx_hpd_irq_handler(dev, hotplug_status);
@@ -1894,6 +1965,23 @@ static irqreturn_t cherryview_irq_handler(int irq, void *arg)
i9xx_hpd_irq_handler(dev_priv, hotplug_status);
valleyview_pipestat_irq_handler(dev, pipe_stats);
valleyview_pipestat_irq_handler(dev_priv, pipe_stats);
+
+ if (IS_CHERRYVIEW(dev)) {
+ if (IS_CHERRYVIEW(dev_priv)) {
+ // FIXME: plb: why are pipes and status mapped this way?
+ if (iir & I915_LPE_PIPE_C_INTERRUPT)
+ i915_notify_audio_buffer_status(dev,
@ -485,7 +484,7 @@ index aab47f7..3ef0d14 100644
} while (0);
enable_rpm_wakeref_asserts(dev_priv);
@@ -2861,6 +2949,72 @@ static void gen8_disable_vblank(struct drm_device *dev, unsigned int pipe)
@@ -2803,6 +2891,72 @@ static void gen8_disable_vblank(struct drm_device *dev, unsigned int pipe)
spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
}
@ -502,7 +501,7 @@ index aab47f7..3ef0d14 100644
+
+ imr = I915_READ(VLV_IMR);
+
+ if (IS_CHERRYVIEW(dev_priv->dev)) {
+ if (IS_CHERRYVIEW(dev_priv)) {
+ // FIXME: plb: looks wrong
+
+ //imr &= ~I915_LPE_PIPE_C_INTERRUPT;
@ -534,7 +533,7 @@ index aab47f7..3ef0d14 100644
+ spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
+ imr = I915_READ(VLV_IMR);
+
+ if (IS_CHERRYVIEW(dev_priv->dev)) {
+ if (IS_CHERRYVIEW(dev_priv)) {
+ // FIXME: plb: looks wrong, should have other interrupts as well?
+ //imr |= I915_LPE_PIPE_C_INTERRUPT;
+ int_bit = (pipe ? (I915_LPE_PIPE_B_INTERRUPT >>
@ -558,7 +557,7 @@ index aab47f7..3ef0d14 100644
static bool
ring_idle(struct intel_engine_cs *engine, u32 seqno)
{
@@ -3371,7 +3525,8 @@ static void vlv_display_irq_postinstall(struct drm_i915_private *dev_priv)
@@ -3293,7 +3447,8 @@ static void vlv_display_irq_postinstall(struct drm_i915_private *dev_priv)
u32 pipestat_mask;
u32 enable_mask;
enum pipe pipe;
@ -568,11 +567,11 @@ index aab47f7..3ef0d14 100644
pipestat_mask = PLANE_FLIP_DONE_INT_STATUS_VLV |
PIPE_CRC_DONE_INTERRUPT_STATUS;
@@ -3385,6 +3540,18 @@ static void vlv_display_irq_postinstall(struct drm_i915_private *dev_priv)
@@ -3307,6 +3462,18 @@ static void vlv_display_irq_postinstall(struct drm_i915_private *dev_priv)
if (IS_CHERRYVIEW(dev_priv))
enable_mask |= I915_DISPLAY_PIPE_C_EVENT_INTERRUPT;
+ if (IS_CHERRYVIEW(dev_priv->dev))
+ if (IS_CHERRYVIEW(dev_priv))
+ // FIXME: plb: looks wrong: what about other interrupts
+ enable_mask |= I915_LPE_PIPE_C_INTERRUPT;
+
@ -580,7 +579,7 @@ index aab47f7..3ef0d14 100644
+ I915_HDMI_AUDIO_BUFFER_DONE;
+ I915_WRITE(I915_LPE_AUDIO_HDMI_STATUS_A, lpe_status_clear);
+ I915_WRITE(I915_LPE_AUDIO_HDMI_STATUS_B, lpe_status_clear);
+ if (IS_CHERRYVIEW(dev_priv->dev))
+ if (IS_CHERRYVIEW(dev_priv))
+ I915_WRITE(I915_LPE_AUDIO_HDMI_STATUS_C, lpe_status_clear);
+
+
@ -588,28 +587,28 @@ index aab47f7..3ef0d14 100644
dev_priv->irq_mask = ~enable_mask;
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 3074c56..5d162b8 100644
index 175595f..d4499ff 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -7964,6 +7964,8 @@ static int chv_crtc_compute_clock(struct intel_crtc *crtc,
@@ -8096,6 +8096,8 @@ static int chv_crtc_compute_clock(struct intel_crtc *crtc,
{
int refclk = 100000;
const intel_limit_t *limit = &intel_limits_chv;
const struct intel_limit *limit = &intel_limits_chv;
+ struct drm_device *dev = crtc->base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
memset(&crtc_state->dpll_hw_state, 0,
sizeof(crtc_state->dpll_hw_state));
@@ -7977,6 +7979,16 @@ static int chv_crtc_compute_clock(struct intel_crtc *crtc,
@@ -8109,6 +8111,16 @@ static int chv_crtc_compute_clock(struct intel_crtc *crtc,
chv_compute_dpll(crtc, crtc_state);
+ /* Added for HDMI Audio */
+ if ((IS_CHERRYVIEW(dev)) || (IS_VALLEYVIEW(dev))) {
+ if (intel_pipe_will_have_type(crtc_state, INTEL_OUTPUT_HDMI)) {
+ if ((IS_CHERRYVIEW(dev_priv)) || (IS_VALLEYVIEW(dev_priv))) {
+ if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) {
+ dev_priv->tmds_clock_speed = crtc_state->port_clock;
+
+ mid_hdmi_audio_signal_event(dev_priv->dev,
+ mid_hdmi_audio_signal_event(dev,
+ HAD_EVENT_MODE_CHANGING);
+ }
+ }
@ -617,27 +616,25 @@ index 3074c56..5d162b8 100644
return 0;
}
@@ -7985,7 +7997,9 @@ static int vlv_crtc_compute_clock(struct intel_crtc *crtc,
@@ -8117,6 +8129,8 @@ static int vlv_crtc_compute_clock(struct intel_crtc *crtc,
{
int refclk = 100000;
const intel_limit_t *limit = &intel_limits_vlv;
-
const struct intel_limit *limit = &intel_limits_vlv;
+ struct drm_device *dev = crtc->base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
memset(&crtc_state->dpll_hw_state, 0,
sizeof(crtc_state->dpll_hw_state));
@@ -7998,6 +8012,16 @@ static int vlv_crtc_compute_clock(struct intel_crtc *crtc,
@@ -8130,6 +8144,16 @@ static int vlv_crtc_compute_clock(struct intel_crtc *crtc,
vlv_compute_dpll(crtc, crtc_state);
+ /* Added for HDMI Audio */
+ if ((IS_CHERRYVIEW(dev)) || (IS_VALLEYVIEW(dev))) {
+ if (intel_pipe_will_have_type(crtc_state, INTEL_OUTPUT_HDMI)) {
+ if ((IS_CHERRYVIEW(dev_priv)) || (IS_VALLEYVIEW(dev_priv))) {
+ if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) {
+ dev_priv->tmds_clock_speed = crtc_state->port_clock;
+
+ mid_hdmi_audio_signal_event(dev_priv->dev,
+ mid_hdmi_audio_signal_event(dev,
+ HAD_EVENT_MODE_CHANGING);
+ }
+ }
@ -645,15 +642,14 @@ index 3074c56..5d162b8 100644
return 0;
}
@@ -14678,6 +14702,83 @@ static void intel_setup_outputs(struct drm_device *dev)
@@ -14913,6 +14937,82 @@ static void intel_setup_outputs(struct drm_device *dev)
drm_helper_move_panel_connectors_to_head(dev);
}
+void chv_set_lpe_audio_reg_pipe(struct drm_device *dev,
+ int encoder_type, enum port port)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_encoder *intel_encoder;
+ struct drm_i915_private *dev_priv = to_i915(dev);
+ struct hdmi_audio_priv *hdmi_priv = get_hdmi_priv();
+
+ if(!hdmi_priv) {
@ -730,7 +726,7 @@ index 3074c56..5d162b8 100644
{
struct drm_device *dev = fb->dev;
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 2adcc15..c4ec79e 100644
index 34e497f..67cbf17 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -38,6 +38,8 @@
@ -742,7 +738,7 @@ index 2adcc15..c4ec79e 100644
static struct drm_device *intel_hdmi_to_dev(struct intel_hdmi *intel_hdmi)
{
return hdmi_to_dig_port(intel_hdmi)->base.base.dev;
@@ -1479,6 +1481,124 @@ intel_hdmi_set_edid(struct drm_connector *connector, bool force)
@@ -1461,6 +1463,124 @@ intel_hdmi_set_edid(struct drm_connector *connector, bool force)
return connected;
}
@ -867,7 +863,7 @@ index 2adcc15..c4ec79e 100644
static enum drm_connector_status
intel_hdmi_detect(struct drm_connector *connector, bool force)
{
@@ -1487,6 +1607,8 @@ intel_hdmi_detect(struct drm_connector *connector, bool force)
@@ -1469,6 +1589,8 @@ intel_hdmi_detect(struct drm_connector *connector, bool force)
struct drm_i915_private *dev_priv = to_i915(connector->dev);
bool live_status = false;
unsigned int try;
@ -876,7 +872,7 @@ index 2adcc15..c4ec79e 100644
DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
connector->base.id, connector->name);
@@ -1523,6 +1645,31 @@ intel_hdmi_detect(struct drm_connector *connector, bool force)
@@ -1505,6 +1627,31 @@ intel_hdmi_detect(struct drm_connector *connector, bool force)
intel_display_power_put(dev_priv, POWER_DOMAIN_GMBUS);
@ -897,7 +893,7 @@ index 2adcc15..c4ec79e 100644
+ /* Send a disconnect event to audio */
+ if (inform_audio) {
+ DRM_DEBUG_DRIVER("Sending event to audio");
+ mid_hdmi_audio_signal_event(dev_priv->dev,
+ mid_hdmi_audio_signal_event(dev,
+ HAD_EVENT_HOT_UNPLUG);
+ }
+ }
@ -908,7 +904,7 @@ index 2adcc15..c4ec79e 100644
return status;
}
@@ -1546,12 +1693,29 @@ intel_hdmi_force(struct drm_connector *connector)
@@ -1528,12 +1675,29 @@ intel_hdmi_force(struct drm_connector *connector)
static int intel_hdmi_get_modes(struct drm_connector *connector)
{
struct edid *edid;
@ -918,7 +914,7 @@ index 2adcc15..c4ec79e 100644
+ hdmi_to_dig_port(intel_hdmi);
+ struct drm_device *dev = connector->dev;
+ int ret;
+ struct drm_i915_private *dev_priv = connector->dev->dev_private;
+
edid = to_intel_connector(connector)->detect_edid;
if (edid == NULL)
@ -930,7 +926,7 @@ index 2adcc15..c4ec79e 100644
+ if (i915_notify_had) {
+ chv_set_lpe_audio_reg_pipe(dev, INTEL_OUTPUT_HDMI,
+ intel_dig_port->port);
+ mid_hdmi_audio_signal_event(dev_priv->dev,
+ mid_hdmi_audio_signal_event(dev,
+ HAD_EVENT_HOT_PLUG);
+ i915_notify_had = 0;
+ }
@ -939,7 +935,7 @@ index 2adcc15..c4ec79e 100644
}
static bool
@@ -2258,6 +2422,20 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
@@ -1907,6 +2071,21 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
u32 temp = I915_READ(PEG_BAND_GAP_DATA);
I915_WRITE(PEG_BAND_GAP_DATA, (temp & ~0xf) | 0xd);
}
@ -952,15 +948,16 @@ index 2adcc15..c4ec79e 100644
+{
+ struct drm_i915_private *dev_priv = container_of(work,
+ struct drm_i915_private, hdmi_audio_wq);
+ struct drm_device *dev = &dev_priv->drm;
+
+ if (i915_hdmi_state == connector_status_connected) {
+ mid_hdmi_audio_signal_event(dev_priv->dev,
+ HAD_EVENT_HOT_PLUG);
+ mid_hdmi_audio_signal_event(dev,
+ HAD_EVENT_HOT_PLUG);
+ }
}
void intel_hdmi_init(struct drm_device *dev,
@@ -2266,7 +2444,10 @@ void intel_hdmi_init(struct drm_device *dev,
@@ -1915,7 +2094,10 @@ void intel_hdmi_init(struct drm_device *dev,
struct intel_digital_port *intel_dig_port;
struct intel_encoder *intel_encoder;
struct intel_connector *intel_connector;
@ -972,7 +969,7 @@ index 2adcc15..c4ec79e 100644
intel_dig_port = kzalloc(sizeof(*intel_dig_port), GFP_KERNEL);
if (!intel_dig_port)
return;
@@ -2277,6 +2458,7 @@ void intel_hdmi_init(struct drm_device *dev,
@@ -1926,6 +2108,7 @@ void intel_hdmi_init(struct drm_device *dev,
return;
}
@ -980,7 +977,7 @@ index 2adcc15..c4ec79e 100644
intel_encoder = &intel_dig_port->base;
drm_encoder_init(dev, &intel_encoder->base, &intel_hdmi_enc_funcs,
@@ -2336,4 +2518,29 @@ void intel_hdmi_init(struct drm_device *dev,
@@ -1985,4 +2168,29 @@ void intel_hdmi_init(struct drm_device *dev,
intel_dig_port->max_lanes = 4;
intel_hdmi_init_connector(intel_dig_port, intel_connector);
@ -1011,7 +1008,7 @@ index 2adcc15..c4ec79e 100644
+
}
From bea9d15e00603196e4d138af691327bbf6a86af0 Mon Sep 17 00:00:00 2001
From c2fc8a0fadd274be5b75f6ca10c3ca35c381d611 Mon Sep 17 00:00:00 2001
From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Date: Tue, 1 Mar 2016 16:25:04 -0600
Subject: [PATCH 04/12] drm/i915: power-related changes non-HDAudio HDMI
@ -1516,10 +1513,10 @@ index 0000000..511311c
+
+#endif /*CONFIG_PM_RUNTIME*/
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 2863b92..883b13c 100644
index 2d24813..23206de 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -31,6 +31,17 @@
@@ -32,6 +32,17 @@
#include "../../../platform/x86/intel_ips.h"
#include <linux/module.h>
@ -1537,15 +1534,15 @@ index 2863b92..883b13c 100644
/**
* DOC: RC6
*
@@ -7264,6 +7275,7 @@ void intel_init_clock_gating_hooks(struct drm_i915_private *dev_priv)
@@ -7774,6 +7785,7 @@ void intel_init_clock_gating_hooks(struct drm_i915_private *dev_priv)
void intel_init_pm(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
struct drm_i915_private *dev_priv = to_i915(dev);
+ gdev = dev;
intel_fbc_init(dev_priv);
@@ -7496,3 +7508,44 @@ void intel_pm_setup(struct drm_device *dev)
@@ -8088,3 +8100,44 @@ void intel_pm_setup(struct drm_device *dev)
atomic_set(&dev_priv->pm.wakeref_count, 0);
atomic_set(&dev_priv->pm.atomic_seq, 0);
}
@ -1591,7 +1588,7 @@ index 2863b92..883b13c 100644
+}
+EXPORT_SYMBOL(ospm_power_using_hw_end);
From b172cffb536124dba41ff37793a67dc6f9a6a39c Mon Sep 17 00:00:00 2001
From d37021d5405ce4eb5f42328b575f07fa5d6f34a9 Mon Sep 17 00:00:00 2001
From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Date: Thu, 3 Mar 2016 11:08:10 -0600
Subject: [PATCH 05/12] drm/i915: Add API code for non-HDAudio HDMI interface
@ -1614,7 +1611,7 @@ Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
diff --git a/drivers/gpu/drm/i915/hdmi_audio_if.c b/drivers/gpu/drm/i915/hdmi_audio_if.c
new file mode 100644
index 0000000..c7c5f8f
index 0000000..d176b25
--- /dev/null
+++ b/drivers/gpu/drm/i915/hdmi_audio_if.c
@@ -0,0 +1,425 @@
@ -1669,7 +1666,7 @@ index 0000000..c7c5f8f
+ struct drm_i915_private *dev_priv =
+ (struct drm_i915_private *) dev->dev_private;
+ memcpy(hdmi_eld, eld, HAD_MAX_ELD_BYTES);
+ mid_hdmi_audio_signal_event(dev_priv->dev, HAD_EVENT_HOT_PLUG);
+ mid_hdmi_audio_signal_event(dev, HAD_EVENT_HOT_PLUG);
+}
+
+static inline int android_hdmi_get_eld(struct drm_device *dev, void *eld)
@ -2044,7 +2041,7 @@ index 0000000..c7c5f8f
+EXPORT_SYMBOL(mid_hdmi_audio_register);
+#endif
From 915a5b433454cab54cda47484390e84cfb8c7b5d Mon Sep 17 00:00:00 2001
From fee88eee7f0b174a146bf612ef19bc0602b5f89b Mon Sep 17 00:00:00 2001
From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Date: Tue, 1 Mar 2016 16:25:04 -0600
Subject: [PATCH 06/12] drm/i915: enable non-HDAudio HDMI interface Makefile
@ -2064,12 +2061,12 @@ Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index 0b88ba0..57406b2 100644
index 684fc1c..ea14a7c 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -14,7 +14,8 @@ i915-y := i915_drv.o \
i915_sysfs.o \
@@ -16,7 +16,8 @@ i915-y := i915_drv.o \
intel_csr.o \
intel_device_info.o \
intel_pm.o \
- intel_runtime_pm.o
+ intel_runtime_pm.o \
@ -2077,8 +2074,8 @@ index 0b88ba0..57406b2 100644
i915-$(CONFIG_COMPAT) += i915_ioc32.o
i915-$(CONFIG_DEBUG_FS) += i915_debugfs.o
@@ -39,6 +40,7 @@ i915-y += i915_cmd_parser.o \
i915_trace_points.o \
@@ -42,6 +43,7 @@ i915-y += i915_cmd_parser.o \
intel_breadcrumbs.o \
intel_lrc.o \
intel_mocs.o \
+ i915_rpm.o \
@ -2086,7 +2083,7 @@ index 0b88ba0..57406b2 100644
intel_uncore.o
From 8213760904b873b68e55f5c707921704d0ff4c8f Mon Sep 17 00:00:00 2001
From 138e6f7e00064d2d94a76308771f4f4b7e528a48 Mon Sep 17 00:00:00 2001
From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Date: Thu, 3 Mar 2016 11:09:26 -0600
Subject: [PATCH 07/12] ALSA: Intel: Atom: add Atom non-HDAudio HDMI interface
@ -2132,10 +2129,10 @@ index 5a240e0..75c679e 100644
+ Choose this option to support HDMI.
+
diff --git a/sound/Makefile b/sound/Makefile
index 7732070..f2c5e82 100644
index c41bdf5..256f335 100644
--- a/sound/Makefile
+++ b/sound/Makefile
@@ -8,6 +8,7 @@ obj-$(CONFIG_DMASOUND) += oss/
@@ -7,6 +7,7 @@ obj-$(CONFIG_DMASOUND) += oss/
obj-$(CONFIG_SND) += core/ i2c/ drivers/ isa/ pci/ ppc/ arm/ sh/ synth/ usb/ \
firewire/ sparc/ spi/ parisc/ pcmcia/ mips/ soc/ atmel/ hda/
obj-$(CONFIG_SND_AOA) += aoa/
@ -5477,7 +5474,7 @@ index 0000000..acc407d
+ return retval;
+}
From 16eb2207449a5bf5115345384e78033cb13a0f3c Mon Sep 17 00:00:00 2001
From ba7b36acd4d4f2bcf9c84c885d385d3d1327b221 Mon Sep 17 00:00:00 2001
From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Date: Sat, 20 Feb 2016 18:08:41 -0600
Subject: [PATCH 08/12] add dependency on PM_RUNTIME
@ -5500,7 +5497,7 @@ index 75c679e..b8b4fce 100644
help
Choose this option to support HDMI.
From 6f73b34ca585c052de0732c02dece07126d36dbe Mon Sep 17 00:00:00 2001
From 30f9d3b223b28623431348350cdf00409b8cef24 Mon Sep 17 00:00:00 2001
From: David Henningsson <david.henningsson@canonical.com>
Date: Fri, 21 Aug 2015 11:08:47 +0200
Subject: [PATCH 09/12] hdmi_audio: Improve position reporting
@ -5553,7 +5550,7 @@ index d8c5574..b2337c3 100644
}
From 3265fa5f1bea0e7820718a1c14528ba8620ee70a Mon Sep 17 00:00:00 2001
From 25f0028061dcb8c4ed3d464419e4095570a68441 Mon Sep 17 00:00:00 2001
From: David Henningsson <david.henningsson@canonical.com>
Date: Fri, 21 Aug 2015 11:18:19 +0200
Subject: [PATCH 10/12] hdmi_audio: Fixup some monitor
@ -5605,7 +5602,7 @@ index b2337c3..1667748 100644
return 0;
}
From fbad36dca91688d71593b61bd170cf4c39eb24fb Mon Sep 17 00:00:00 2001
From 0ef07c8e6cf8505f89ceab0b27895d8a21062d70 Mon Sep 17 00:00:00 2001
From: Toyo Abe <toyo.abe@gmail.com>
Date: Thu, 3 Mar 2016 12:57:41 +0900
Subject: [PATCH 11/12] hdmi_audio: Fix mishandling of AUD_HDMI_STATUS_v2
@ -5635,7 +5632,7 @@ index 1667748..86db38e 100644
} else
break;
From 9c175c10b955b2d6f2865bb4a1c2dcda6d57dbf6 Mon Sep 17 00:00:00 2001
From 71729bb7f7f080b68e36a4e4b9f65fce67d5e869 Mon Sep 17 00:00:00 2001
From: Jerome Anand <jerome.anand@intel.com>
Date: Fri, 1 Apr 2016 11:07:48 +0530
Subject: [PATCH 12/12] Create a platform device for hdmi audio driver and