On 21-06-18, 14:40, Srinivas Kandagatla wrote: > This patch adds support to SLIMbus stream apis for slimbus device. > SLIMbus streaming involves adding support to Data Channel Management and > channel Reconfiguration Messages to slim core plus few stream apis. > >From slim device side the apis are very simple mostly inline with other ^^ Bad char > > +/** > + * enum slim_port_direction: SLIMbus port direction blank line here makes it more readable > +/** > + * struct slim_presence_rate - Presense Rate table for all Natural Frequencies > + * The Presense rate of a constant bitrate stram is mean flow rate of the ^^^^^ Do you mean stream? > +static struct slim_presence_rate { > + int rate; > + int pr_code; > +} prate_table[] = { > + {12000, 0x01}, > + {24000, 0x02}, > + {48000, 0x03}, > + {96000, 0x04}, > + {192000, 0x05}, > + {384000, 0x06}, > + {768000, 0x07}, > + {110250, 0x09}, > + {220500, 0x0a}, > + {441000, 0x0b}, > + {882000, 0x0c}, > + {176400, 0x0d}, > + {352800, 0x0e}, > + {705600, 0x0f}, > + {4000, 0x10}, > + {8000, 0x11}, > + {16000, 0x12}, > + {32000, 0x13}, > + {64000, 0x14}, > + {128000, 0x15}, > + {256000, 0x16}, > + {512000, 0x17}, this table values are indices, so how about using only rate and removing pr_code and use array index for that, saves half the space.. > +struct slim_stream_runtime *slim_stream_allocate(struct slim_device *dev, > + const char *name) > +{ > + struct slim_stream_runtime *rt; > + unsigned long flags; > + > + rt = kzalloc(sizeof(*rt), GFP_KERNEL); > + if (!rt) > + return ERR_PTR(-ENOMEM); > + > + rt->name = kasprintf(GFP_KERNEL, "slim-%s", name); > + if (!rt->name) { > + kfree(rt); > + return ERR_PTR(-ENOMEM); > + } > + > + rt->dev = dev; > + rt->state = SLIM_STREAM_STATE_ALLOCATED; > + spin_lock_irqsave(&dev->stream_list_lock, flags); > + list_add_tail(&rt->node, &dev->stream_list); > + spin_unlock_irqrestore(&dev->stream_list_lock, flags); Any reason for _irqsave variant? Do you expect stream APIs to be called from ISR? > +/* > + * slim_stream_prepare() - Prepare a SLIMbus Stream > + * > + * @rt: instance of slim stream runtime to configure > + * @cfg: new configuration for the stream > + * > + * This API will configure SLIMbus stream with config parameters from cfg. > + * return zero on success and error code on failure. From ASoC DPCM framework, > + * this state is linked to hw_params()/prepare() operation. so would this be called from either.. btw prepare can be invoked multiple times, so that should be taken into consideration by caller. > + */ > +int slim_stream_prepare(struct slim_stream_runtime *rt, > + struct slim_stream_config *cfg) > +{ > + struct slim_controller *ctrl = rt->dev->ctrl; > + struct slim_port *port; > + int num_ports, i, port_id; > + > + num_ports = hweight32(cfg->port_mask); > + rt->ports = kcalloc(num_ports, sizeof(*port), GFP_ATOMIC); since this is supposed to be invoked in hw_params()/prepare, why would we need GFP_ATOMIC here? > +static int slim_activate_channel(struct slim_stream_runtime *stream, > + struct slim_port *port) > +{ > + struct slim_device *sdev = stream->dev; > + struct slim_val_inf msg = {0, 0, NULL, NULL}; > + u8 mc = SLIM_MSG_MC_NEXT_ACTIVATE_CHANNEL; > + DEFINE_SLIM_LDEST_TXN(txn, mc, 5, stream->dev->laddr, &msg); > + u8 wbuf[1]; > + > + txn.msg->num_bytes = 1; > + txn.msg->wbuf = wbuf; > + wbuf[0] = port->ch.id; > + port->ch.state = SLIM_CH_STATE_ACTIVE; > + > + return slim_do_transfer(sdev->ctrl, &txn); > +} how about adding a macro for sending message, which fills slim_val_inf and you invoke that with required parameters to be filled. > +/* > + * slim_stream_enable() - Enable a prepared SLIMbus Stream Do you want to check if it is already prepared ..? > +/** > + * slim_stream_direction: SLIMbus stream direction > + * > + * @SLIM_STREAM_DIR_PLAYBACK: Playback > + * @SLIM_STREAM_DIR_CAPTURE: Capture > + */ > +enum slim_stream_direction { > + SLIM_STREAM_DIR_PLAYBACK = 0, > + SLIM_STREAM_DIR_CAPTURE, this is same as SNDRV_PCM_STREAM_PLAYBACK, so should we use that here? -- ~Vinod -- To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html