soundwire: cdns: Add port routines
Add support for Cadence port management and implement master port ops. Signed-off-by: Sanyog Kale <sanyog.r.kale@intel.com> Signed-off-by: Shreyas NC <shreyas.nc@intel.com> Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
@@ -4,6 +4,92 @@
|
||||
#ifndef __SDW_CADENCE_H
|
||||
#define __SDW_CADENCE_H
|
||||
|
||||
/**
|
||||
* struct sdw_cdns_pdi: PDI (Physical Data Interface) instance
|
||||
*
|
||||
* @assigned: pdi assigned
|
||||
* @num: pdi number
|
||||
* @intel_alh_id: link identifier
|
||||
* @l_ch_num: low channel for PDI
|
||||
* @h_ch_num: high channel for PDI
|
||||
* @ch_count: total channel count for PDI
|
||||
* @dir: data direction
|
||||
* @type: stream type, PDM or PCM
|
||||
*/
|
||||
struct sdw_cdns_pdi {
|
||||
bool assigned;
|
||||
int num;
|
||||
int intel_alh_id;
|
||||
int l_ch_num;
|
||||
int h_ch_num;
|
||||
int ch_count;
|
||||
enum sdw_data_direction dir;
|
||||
enum sdw_stream_type type;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct sdw_cdns_port: Cadence port structure
|
||||
*
|
||||
* @num: port number
|
||||
* @assigned: port assigned
|
||||
* @ch: channel count
|
||||
* @direction: data port direction
|
||||
* @pdi: pdi for this port
|
||||
*/
|
||||
struct sdw_cdns_port {
|
||||
unsigned int num;
|
||||
bool assigned;
|
||||
unsigned int ch;
|
||||
enum sdw_data_direction direction;
|
||||
struct sdw_cdns_pdi *pdi;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct sdw_cdns_streams: Cadence stream data structure
|
||||
*
|
||||
* @num_bd: number of bidirectional streams
|
||||
* @num_in: number of input streams
|
||||
* @num_out: number of output streams
|
||||
* @num_ch_bd: number of bidirectional stream channels
|
||||
* @num_ch_bd: number of input stream channels
|
||||
* @num_ch_bd: number of output stream channels
|
||||
* @num_pdi: total number of PDIs
|
||||
* @bd: bidirectional streams
|
||||
* @in: input streams
|
||||
* @out: output streams
|
||||
*/
|
||||
struct sdw_cdns_streams {
|
||||
unsigned int num_bd;
|
||||
unsigned int num_in;
|
||||
unsigned int num_out;
|
||||
unsigned int num_ch_bd;
|
||||
unsigned int num_ch_in;
|
||||
unsigned int num_ch_out;
|
||||
unsigned int num_pdi;
|
||||
struct sdw_cdns_pdi *bd;
|
||||
struct sdw_cdns_pdi *in;
|
||||
struct sdw_cdns_pdi *out;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct sdw_cdns_stream_config: stream configuration
|
||||
*
|
||||
* @pcm_bd: number of bidirectional PCM streams supported
|
||||
* @pcm_in: number of input PCM streams supported
|
||||
* @pcm_out: number of output PCM streams supported
|
||||
* @pdm_bd: number of bidirectional PDM streams supported
|
||||
* @pdm_in: number of input PDM streams supported
|
||||
* @pdm_out: number of output PDM streams supported
|
||||
*/
|
||||
struct sdw_cdns_stream_config {
|
||||
unsigned int pcm_bd;
|
||||
unsigned int pcm_in;
|
||||
unsigned int pcm_out;
|
||||
unsigned int pdm_bd;
|
||||
unsigned int pdm_in;
|
||||
unsigned int pdm_out;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct sdw_cdns - Cadence driver context
|
||||
* @dev: Linux device
|
||||
@@ -12,6 +98,10 @@
|
||||
* @response_buf: SoundWire response buffer
|
||||
* @tx_complete: Tx completion
|
||||
* @defer: Defer pointer
|
||||
* @ports: Data ports
|
||||
* @num_ports: Total number of data ports
|
||||
* @pcm: PCM streams
|
||||
* @pdm: PDM streams
|
||||
* @registers: Cadence registers
|
||||
* @link_up: Link status
|
||||
* @msg_count: Messages sent on bus
|
||||
@@ -25,6 +115,12 @@ struct sdw_cdns {
|
||||
struct completion tx_complete;
|
||||
struct sdw_defer *defer;
|
||||
|
||||
struct sdw_cdns_port *ports;
|
||||
int num_ports;
|
||||
|
||||
struct sdw_cdns_streams pcm;
|
||||
struct sdw_cdns_streams pdm;
|
||||
|
||||
void __iomem *registers;
|
||||
|
||||
bool link_up;
|
||||
@@ -42,6 +138,8 @@ irqreturn_t sdw_cdns_irq(int irq, void *dev_id);
|
||||
irqreturn_t sdw_cdns_thread(int irq, void *dev_id);
|
||||
|
||||
int sdw_cdns_init(struct sdw_cdns *cdns);
|
||||
int sdw_cdns_pdi_init(struct sdw_cdns *cdns,
|
||||
struct sdw_cdns_stream_config config);
|
||||
int sdw_cdns_enable_interrupt(struct sdw_cdns *cdns);
|
||||
|
||||
enum sdw_command_response
|
||||
@@ -53,4 +151,6 @@ cdns_xfer_msg_defer(struct sdw_bus *bus,
|
||||
|
||||
enum sdw_command_response
|
||||
cdns_reset_page_addr(struct sdw_bus *bus, unsigned int dev_num);
|
||||
|
||||
int cdns_bus_conf(struct sdw_bus *bus, struct sdw_bus_params *params);
|
||||
#endif /* __SDW_CADENCE_H */
|
||||
|
Reference in New Issue
Block a user