soundwire-for-asoc-5.11
Tag for asoc to resolve build dependency with commitb7cab9be7c
("soundwire: SDCA: detect sdca_cascade interrupt") -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEE+vs47OPLdNbVcHzyfBQHDyUjg0cFAl/HPjQACgkQfBQHDyUj g0d3ghAApbm5mSsQLCm9SFzeyNxfpeeibwATQ9aJXsNHie/4u3wDNXa+5i03X+b7 8UQ4tU5zjm0zzoQuDFDKtpBA4n1nxjZLABXpZKQFX0gq1zSFWrZlQ+XFkxaLRlGX 78fVULqMEQgsFd7SpEWDpUMMlaT629VN7WOOc7XFuqpnjgCq/KTsLxsgiFQJUJAH v267Po1lHjJk3LBDLjuSHG6Y7pnyvp2emIQ+5DYD3NA6z43u1RTKJKJymsInRtaH yVe+zHk+SeTi6/AX+fYl3c7UPAmi+1nnMCEGC6oApn8KJNH2tqUnArtvtSETv3wq cfMMcA+7NxjKrDg7nh+oa3HQNXndPc9SFipY8uEbpx43DtpUR7hhWKiioHHMIJmJ cMKvpo4ZKflqmwsS/uwSJ5SaEgyyHkn20dID1wm476yBrl3smiU4+eVf9LwVJkeM iMSZyjtcYJsLcPjt3YOvC3bATeYFcRWIeCaKQ0vnDBXDIs7bgW3xi77CLV8xwYYg /YQ0lWqi62pe8bIvJOF+TvFTLa76j0uTmfG5ZXL3qQ9d3DKnljfavzv23r9FgYV6 H5Tg+V7PMM1i3FPzk8S3q0BPzLvPU6wGmCf8GV18V21Ubu8dWlKrwXLrYh//X/IL IjD3t2KXhqM+Bi/lZcCpBSl8o59tN7exOMRyJBbNt3PYlzDaGTg= =ULXu -----END PGP SIGNATURE----- gpgsig -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEreZoqmdXGLWf4p/qJNaLcl1Uh9AFAl/HnLwACgkQJNaLcl1U h9Bgewf/VKdaVZzzWoD1lWat7F9PjDuH8OGlweuXk/SnXMSJ5NJ2K2oQhsH67Pju cuzWthy52nDir0W0uHsJAV7FoSwj5vB4cxD+Pb61+gk68EnHrbu4W2xpPDyFbfXd /fb+w2ioGEuQEQBDG984tWuAM5zlOb65T2MFN/FU+zmIPzEQ2BrjgEBUr1D/MtNR PsVyGvrWMOkJ0/iHne9WhD/VjFauDyvVIjPT/5aMKfYwi56a+SP9hihD9kdX2y4k ghMrwujnlwHYGAphwCxM0WLi8smtYrmNSEuaalV0ARh1IBnIqRPL8aWpdTClraU4 WMLdWLBME00tzviBqPOnELBpkww5+w== =M1im -----END PGP SIGNATURE----- Merge tag 'soundwire-for-asoc-5.11' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/soundwire into asoc-5.11 soundwire-for-asoc-5.11 Tag for asoc to resolve build dependency with commitb7cab9be7c
("soundwire: SDCA: detect sdca_cascade interrupt")
This commit is contained in:
Коммит
c075a0c0f1
|
@ -1424,6 +1424,7 @@ static int sdw_handle_slave_alerts(struct sdw_slave *slave)
|
|||
int port_num, stat, ret, count = 0;
|
||||
unsigned long port;
|
||||
bool slave_notify = false;
|
||||
u8 sdca_cascade = 0;
|
||||
u8 buf, buf2[2], _buf, _buf2[2];
|
||||
bool parity_check;
|
||||
bool parity_quirk;
|
||||
|
@ -1453,6 +1454,16 @@ static int sdw_handle_slave_alerts(struct sdw_slave *slave)
|
|||
goto io_err;
|
||||
}
|
||||
|
||||
if (slave->prop.is_sdca) {
|
||||
ret = sdw_read(slave, SDW_DP0_INT);
|
||||
if (ret < 0) {
|
||||
dev_err(slave->bus->dev,
|
||||
"SDW_DP0_INT read failed:%d\n", ret);
|
||||
goto io_err;
|
||||
}
|
||||
sdca_cascade = ret & SDW_DP0_SDCA_CASCADE;
|
||||
}
|
||||
|
||||
do {
|
||||
/*
|
||||
* Check parity, bus clash and Slave (impl defined)
|
||||
|
@ -1489,6 +1500,10 @@ static int sdw_handle_slave_alerts(struct sdw_slave *slave)
|
|||
clear |= SDW_SCP_INT1_IMPL_DEF;
|
||||
}
|
||||
|
||||
/* the SDCA interrupts are cleared in the codec driver .interrupt_callback() */
|
||||
if (sdca_cascade)
|
||||
slave_notify = true;
|
||||
|
||||
/* Check port 0 - 3 interrupts */
|
||||
port = buf & SDW_SCP_INT1_PORT0_3;
|
||||
|
||||
|
@ -1526,6 +1541,7 @@ static int sdw_handle_slave_alerts(struct sdw_slave *slave)
|
|||
/* Update the Slave driver */
|
||||
if (slave_notify && slave->ops &&
|
||||
slave->ops->interrupt_callback) {
|
||||
slave_intr.sdca_cascade = sdca_cascade;
|
||||
slave_intr.control_port = clear;
|
||||
memcpy(slave_intr.port, &port_status,
|
||||
sizeof(slave_intr.port));
|
||||
|
@ -1563,11 +1579,21 @@ static int sdw_handle_slave_alerts(struct sdw_slave *slave)
|
|||
goto io_err;
|
||||
}
|
||||
|
||||
if (slave->prop.is_sdca) {
|
||||
ret = sdw_read(slave, SDW_DP0_INT);
|
||||
if (ret < 0) {
|
||||
dev_err(slave->bus->dev,
|
||||
"SDW_DP0_INT read failed:%d\n", ret);
|
||||
goto io_err;
|
||||
}
|
||||
sdca_cascade = ret & SDW_DP0_SDCA_CASCADE;
|
||||
}
|
||||
|
||||
/* Make sure no interrupts are pending */
|
||||
buf &= _buf;
|
||||
buf2[0] &= _buf2[0];
|
||||
buf2[1] &= _buf2[1];
|
||||
stat = buf || buf2[0] || buf2[1];
|
||||
stat = buf || buf2[0] || buf2[1] || sdca_cascade;
|
||||
|
||||
/*
|
||||
* Exit loop if Slave is continuously in ALERT state even
|
||||
|
|
|
@ -37,6 +37,7 @@ static int field##_attribute_alloc(struct device *dev, \
|
|||
return -ENOMEM; \
|
||||
dpn_attr->N = N; \
|
||||
dpn_attr->dir = dir; \
|
||||
sysfs_attr_init(&dpn_attr->dev_attr.attr); \
|
||||
dpn_attr->format_string = format_string; \
|
||||
dpn_attr->dev_attr.attr.name = __stringify(field); \
|
||||
dpn_attr->dev_attr.attr.mode = 0444; \
|
||||
|
|
|
@ -359,6 +359,7 @@ struct sdw_dpn_prop {
|
|||
* @sink_dpn_prop: Sink Data Port N properties
|
||||
* @scp_int1_mask: SCP_INT1_MASK desired settings
|
||||
* @quirks: bitmask identifying deltas from the MIPI specification
|
||||
* @is_sdca: the Slave supports the SDCA specification
|
||||
*/
|
||||
struct sdw_slave_prop {
|
||||
u32 mipi_revision;
|
||||
|
@ -382,6 +383,7 @@ struct sdw_slave_prop {
|
|||
struct sdw_dpn_prop *sink_dpn_prop;
|
||||
u8 scp_int1_mask;
|
||||
u32 quirks;
|
||||
bool is_sdca;
|
||||
};
|
||||
|
||||
#define SDW_SLAVE_QUIRKS_INVALID_INITIAL_PARITY BIT(0)
|
||||
|
@ -479,10 +481,12 @@ struct sdw_slave_id {
|
|||
|
||||
/**
|
||||
* struct sdw_slave_intr_status - Slave interrupt status
|
||||
* @sdca_cascade: set if the Slave device reports an SDCA interrupt
|
||||
* @control_port: control port status
|
||||
* @port: data port status
|
||||
*/
|
||||
struct sdw_slave_intr_status {
|
||||
bool sdca_cascade;
|
||||
u8 control_port;
|
||||
u8 port[15];
|
||||
};
|
||||
|
|
Загрузка…
Ссылка в новой задаче