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:
		
				commit
				
					
						c075a0c0f1
					
				
			
		
					 3 changed files with 32 additions and 1 deletions
				
			
		| 
						 | 
					@ -1424,6 +1424,7 @@ static int sdw_handle_slave_alerts(struct sdw_slave *slave)
 | 
				
			||||||
	int port_num, stat, ret, count = 0;
 | 
						int port_num, stat, ret, count = 0;
 | 
				
			||||||
	unsigned long port;
 | 
						unsigned long port;
 | 
				
			||||||
	bool slave_notify = false;
 | 
						bool slave_notify = false;
 | 
				
			||||||
 | 
						u8 sdca_cascade = 0;
 | 
				
			||||||
	u8 buf, buf2[2], _buf, _buf2[2];
 | 
						u8 buf, buf2[2], _buf, _buf2[2];
 | 
				
			||||||
	bool parity_check;
 | 
						bool parity_check;
 | 
				
			||||||
	bool parity_quirk;
 | 
						bool parity_quirk;
 | 
				
			||||||
| 
						 | 
					@ -1453,6 +1454,16 @@ static int sdw_handle_slave_alerts(struct sdw_slave *slave)
 | 
				
			||||||
		goto io_err;
 | 
							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 {
 | 
						do {
 | 
				
			||||||
		/*
 | 
							/*
 | 
				
			||||||
		 * Check parity, bus clash and Slave (impl defined)
 | 
							 * 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;
 | 
								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 */
 | 
							/* Check port 0 - 3 interrupts */
 | 
				
			||||||
		port = buf & SDW_SCP_INT1_PORT0_3;
 | 
							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 */
 | 
							/* Update the Slave driver */
 | 
				
			||||||
		if (slave_notify && slave->ops &&
 | 
							if (slave_notify && slave->ops &&
 | 
				
			||||||
		    slave->ops->interrupt_callback) {
 | 
							    slave->ops->interrupt_callback) {
 | 
				
			||||||
 | 
								slave_intr.sdca_cascade = sdca_cascade;
 | 
				
			||||||
			slave_intr.control_port = clear;
 | 
								slave_intr.control_port = clear;
 | 
				
			||||||
			memcpy(slave_intr.port, &port_status,
 | 
								memcpy(slave_intr.port, &port_status,
 | 
				
			||||||
			       sizeof(slave_intr.port));
 | 
								       sizeof(slave_intr.port));
 | 
				
			||||||
| 
						 | 
					@ -1563,11 +1579,21 @@ static int sdw_handle_slave_alerts(struct sdw_slave *slave)
 | 
				
			||||||
			goto io_err;
 | 
								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 */
 | 
							/* Make sure no interrupts are pending */
 | 
				
			||||||
		buf &= _buf;
 | 
							buf &= _buf;
 | 
				
			||||||
		buf2[0] &= _buf2[0];
 | 
							buf2[0] &= _buf2[0];
 | 
				
			||||||
		buf2[1] &= _buf2[1];
 | 
							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
 | 
							 * Exit loop if Slave is continuously in ALERT state even
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -37,6 +37,7 @@ static int field##_attribute_alloc(struct device *dev,			\
 | 
				
			||||||
		return -ENOMEM;						\
 | 
							return -ENOMEM;						\
 | 
				
			||||||
	dpn_attr->N = N;						\
 | 
						dpn_attr->N = N;						\
 | 
				
			||||||
	dpn_attr->dir = dir;						\
 | 
						dpn_attr->dir = dir;						\
 | 
				
			||||||
 | 
						sysfs_attr_init(&dpn_attr->dev_attr.attr);			\
 | 
				
			||||||
	dpn_attr->format_string = format_string;			\
 | 
						dpn_attr->format_string = format_string;			\
 | 
				
			||||||
	dpn_attr->dev_attr.attr.name = __stringify(field);		\
 | 
						dpn_attr->dev_attr.attr.name = __stringify(field);		\
 | 
				
			||||||
	dpn_attr->dev_attr.attr.mode = 0444;				\
 | 
						dpn_attr->dev_attr.attr.mode = 0444;				\
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -359,6 +359,7 @@ struct sdw_dpn_prop {
 | 
				
			||||||
 * @sink_dpn_prop: Sink Data Port N properties
 | 
					 * @sink_dpn_prop: Sink Data Port N properties
 | 
				
			||||||
 * @scp_int1_mask: SCP_INT1_MASK desired settings
 | 
					 * @scp_int1_mask: SCP_INT1_MASK desired settings
 | 
				
			||||||
 * @quirks: bitmask identifying deltas from the MIPI specification
 | 
					 * @quirks: bitmask identifying deltas from the MIPI specification
 | 
				
			||||||
 | 
					 * @is_sdca: the Slave supports the SDCA specification
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
struct sdw_slave_prop {
 | 
					struct sdw_slave_prop {
 | 
				
			||||||
	u32 mipi_revision;
 | 
						u32 mipi_revision;
 | 
				
			||||||
| 
						 | 
					@ -382,6 +383,7 @@ struct sdw_slave_prop {
 | 
				
			||||||
	struct sdw_dpn_prop *sink_dpn_prop;
 | 
						struct sdw_dpn_prop *sink_dpn_prop;
 | 
				
			||||||
	u8 scp_int1_mask;
 | 
						u8 scp_int1_mask;
 | 
				
			||||||
	u32 quirks;
 | 
						u32 quirks;
 | 
				
			||||||
 | 
						bool is_sdca;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define SDW_SLAVE_QUIRKS_INVALID_INITIAL_PARITY	BIT(0)
 | 
					#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
 | 
					 * struct sdw_slave_intr_status - Slave interrupt status
 | 
				
			||||||
 | 
					 * @sdca_cascade: set if the Slave device reports an SDCA interrupt
 | 
				
			||||||
 * @control_port: control port status
 | 
					 * @control_port: control port status
 | 
				
			||||||
 * @port: data port status
 | 
					 * @port: data port status
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
struct sdw_slave_intr_status {
 | 
					struct sdw_slave_intr_status {
 | 
				
			||||||
 | 
						bool sdca_cascade;
 | 
				
			||||||
	u8 control_port;
 | 
						u8 control_port;
 | 
				
			||||||
	u8 port[15];
 | 
						u8 port[15];
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue