Merge "slim-msm: Add support to set port config and options"

This commit is contained in:
Linux Build Service Account 2015-06-30 23:48:38 -07:00 committed by Gerrit - the friendly Code Review server
commit 18913d03d5
2 changed files with 33 additions and 11 deletions

View File

@ -189,34 +189,53 @@ msm_slim_sps_mem_free(struct msm_slim_ctrl *dev, struct sps_mem_buffer *mem)
mem->phys_base = 0;
}
void msm_hw_set_port(struct msm_slim_ctrl *dev, u8 port_b, u8 pn)
void msm_hw_set_port(struct msm_slim_ctrl *dev, u8 pipenum, u8 portnum)
{
struct slim_controller *ctrl;
struct slim_ch *chan;
struct msm_slim_pshpull_parm *parm;
u32 set_cfg = DEF_WATERMARK | DEF_ALIGN | DEF_PACK | ENABLE_PORT;
u32 set_cfg = 0;
struct slim_port_cfg cfg = dev->ctrl.ports[portnum].cfg;
if (!dev) {
pr_err("%s:Dev node is null\n", __func__);
return;
}
if (pn >= dev->port_nums) {
if (portnum >= dev->port_nums) {
pr_err("%s:Invalid port\n", __func__);
return;
}
ctrl = &dev->ctrl;
chan = ctrl->ports[pn].ch;
parm = &dev->pipes[pn].psh_pull;
writel_relaxed(set_cfg, PGD_PORT(PGD_PORT_CFGn, port_b, dev->ver));
writel_relaxed(DEF_BLKSZ, PGD_PORT(PGD_PORT_BLKn, port_b, dev->ver));
writel_relaxed(DEF_TRANSZ, PGD_PORT(PGD_PORT_TRANn, port_b, dev->ver));
chan = ctrl->ports[portnum].ch;
parm = &dev->pipes[portnum].psh_pull;
if (cfg.watermark)
set_cfg = (cfg.watermark << 1);
else
set_cfg = DEF_WATERMARK;
if (cfg.port_opts & SLIM_OPT_NO_PACK)
set_cfg |= DEF_NO_PACK;
else
set_cfg |= DEF_PACK;
if (cfg.port_opts & SLIM_OPT_ALIGN_MSB)
set_cfg |= DEF_ALIGN_MSB;
else
set_cfg |= DEF_ALIGN_LSB;
set_cfg |= ENABLE_PORT;
writel_relaxed(set_cfg, PGD_PORT(PGD_PORT_CFGn, pipenum, dev->ver));
writel_relaxed(DEF_BLKSZ, PGD_PORT(PGD_PORT_BLKn, pipenum, dev->ver));
writel_relaxed(DEF_TRANSZ, PGD_PORT(PGD_PORT_TRANn, pipenum, dev->ver));
if (chan->prot == SLIM_PUSH || chan->prot == SLIM_PULL) {
set_cfg = 0;
set_cfg |= ((0xFFFF & parm->num_samples)<<16);
set_cfg |= (0xFFFF & parm->rpt_period);
writel_relaxed(set_cfg, PGD_PORT(PGD_PORT_PSHPLLn,
port_b, dev->ver));
pipenum, dev->ver));
}
/* Make sure that port registers are updated before returning */
mb();

View File

@ -71,9 +71,12 @@
#define DEF_RETRY_MS 10
#define MSM_CONCUR_MSG 8
#define SAT_CONCUR_MSG 8
#define DEF_WATERMARK (8 << 1)
#define DEF_ALIGN 0
#define DEF_ALIGN_LSB 0
#define DEF_ALIGN_MSB (1 << 7)
#define DEF_PACK (1 << 6)
#define DEF_NO_PACK 0
#define ENABLE_PORT 1
#define DEF_BLKSZ 0
@ -379,7 +382,7 @@ void msm_slim_put_ctrl(struct msm_slim_ctrl *dev);
irqreturn_t msm_slim_port_irq_handler(struct msm_slim_ctrl *dev, u32 pstat);
int msm_slim_init_endpoint(struct msm_slim_ctrl *dev, struct msm_slim_endp *ep);
void msm_slim_free_endpoint(struct msm_slim_endp *ep);
void msm_hw_set_port(struct msm_slim_ctrl *dev, u8 pn, u8 port_no);
void msm_hw_set_port(struct msm_slim_ctrl *dev, u8 pipenum, u8 portnum);
int msm_alloc_port(struct slim_controller *ctrl, u8 pn);
void msm_dealloc_port(struct slim_controller *ctrl, u8 pn);
int msm_slim_connect_pipe_port(struct msm_slim_ctrl *dev, u8 pn);