Lines Matching defs:output

186 static void stm_output_claim(struct stm_device *stm, struct stm_output *output)
188 struct stp_master *master = stm_master(stm, output->master);
191 lockdep_assert_held(&output->lock);
193 if (WARN_ON_ONCE(master->nr_free < output->nr_chans))
196 bitmap_allocate_region(&master->chan_map[0], output->channel,
197 ilog2(output->nr_chans));
199 master->nr_free -= output->nr_chans;
203 stm_output_disclaim(struct stm_device *stm, struct stm_output *output)
205 struct stp_master *master = stm_master(stm, output->master);
208 lockdep_assert_held(&output->lock);
210 bitmap_release_region(&master->chan_map[0], output->channel,
211 ilog2(output->nr_chans));
213 master->nr_free += output->nr_chans;
214 output->nr_chans = 0;
283 struct stm_output *output)
302 spin_lock(&output->lock);
303 /* output is already assigned -- shouldn't happen */
304 if (WARN_ON_ONCE(output->nr_chans))
311 output->master = midx;
312 output->channel = cidx;
313 output->nr_chans = width;
321 ret = stm->pdrv->output_open(priv, output);
326 stm_output_claim(stm, output);
332 output->nr_chans = 0;
334 spin_unlock(&output->lock);
340 static void stm_output_free(struct stm_device *stm, struct stm_output *output)
343 spin_lock(&output->lock);
344 if (output->nr_chans)
345 stm_output_disclaim(stm, output);
347 stm->pdrv->output_close(output);
348 spin_unlock(&output->lock);
352 static void stm_output_init(struct stm_output *output)
354 spin_lock_init(&output->lock);
501 stm_output_init(&stmf->output);
526 stm->data->unlink(stm->data, stmf->output.master,
527 stmf->output.channel);
529 stm_output_free(stm, &stmf->output);
542 stm_assign_first_policy(struct stm_device *stm, struct stm_output *output,
560 err = stm_output_assign(stm, width, pn, output);
602 stm_write(struct stm_device *stm, struct stm_output *output,
611 err = stm->pdrv->write(stm->data, output, chan, buf, count);
633 if (!stmf->output.nr_chans) {
639 err = stm_assign_first_policy(stmf->stm, &stmf->output, ids, 1);
642 * output, which is just fine for write()
660 count = stm_write(stm, &stmf->output, 0, kbuf, count);
705 if (stmf->output.nr_chans * stm->data->sw_mmiosz != size)
708 phys = stm->data->mmio_addr(stm->data, stmf->output.master,
709 stmf->output.channel,
710 stmf->output.nr_chans);
733 if (stmf->output.nr_chans)
765 ret = stm_assign_first_policy(stmf->stm, &stmf->output, ids,
771 ret = stm->data->link(stm->data, stmf->output.master,
772 stmf->output.channel);
775 stm_output_free(stmf->stm, &stmf->output);
787 .master = stmf->output.master,
788 .channel = stmf->output.channel,
789 .width = stmf->output.nr_chans,
822 stmf->output.master,
823 stmf->output.channel,
824 stmf->output.nr_chans,
1011 err = stm_assign_first_policy(stm, &src->output, ids,
1020 err = stm->data->link(stm->data, src->output.master,
1021 src->output.channel);
1033 stm_output_free(stm, &src->output);
1083 stm_output_free(link, &src->output);
1104 stm->data->unlink(stm->data, src->output.master,
1105 src->output.channel);
1252 stm_output_init(&src->output);
1291 if (!src->output.nr_chans)
1294 if (chan >= src->output.nr_chans)
1301 count = stm_write(stm, &src->output, chan, buf, count);