dao
struct dao, daio);
dao->ops->clear_left_input(dao);
dao->ops->clear_right_input(dao);
dao = container_of(atc->daios[atc->rca_state ? LINEO1 : RCA],
struct dao, daio);
dao->ops->set_left_input(dao, rscs[0]);
dao->ops->set_right_input(dao, rscs[1]);
struct dao *dao = container_of(atc->daios[type], struct dao, daio);
return dao->ops->get_spos(dao, status);
struct dao *dao = container_of(atc->daios[type], struct dao, daio);
dao->ops->set_spos(dao, status);
dao->ops->commit_write(dao);
struct dao *dao;
dao = container_of(atc->daios[SPDIFOO], struct dao, daio);
err = dao->ops->reinit(dao, &da_dsc);
dao->ops->set_left_input(dao, rscs[0]);
dao->ops->set_right_input(dao, rscs[1]);
dao->ops->set_spos(dao, spos);
dao->ops->commit_write(dao);
struct dao *dao = NULL;
dao = container_of(daio, struct dao, daio);
dao->ops->clear_left_input(dao);
dao->ops->clear_right_input(dao);
struct dao *dao;
dao = container_of(atc->daios[j], struct dao, daio);
dao->ops->set_left_input(dao, rscs[0]);
dao->ops->set_right_input(dao, rscs[1]);
struct dao *dao = container_of(atc->daios[SPDIFOO], struct dao, daio);
dao->ops->get_spos(dao, &status);
dao->ops->set_spos(dao, status);
dao->ops->commit_write(dao);
struct dao *dao;
dao = container_of(atc->daios[SPDIFOO], struct dao, daio);
dao->ops->set_left_input(dao, &amixer->rsc);
dao->ops->set_right_input(dao, &amixer->rsc);
struct dao *dao;
dao = container_of(atc->daios[atc->rca_state ? RCA : LINEO1],
static int dao_rsc_reinit(struct dao *dao, const struct dao_desc *desc);
static int dao_spdif_get_spos(struct dao *dao, unsigned int *spos)
dao->hw->dao_get_spos(dao->ctrl_blk, spos);
static int dao_spdif_set_spos(struct dao *dao, unsigned int spos)
dao->hw->dao_set_spos(dao->ctrl_blk, spos);
static int dao_commit_write(struct dao *dao)
int idx = daio_device_index(dao->daio.type, dao->hw);
dao->hw->dao_commit_write(dao->hw, idx, dao->ctrl_blk);
static int dao_set_left_input(struct dao *dao, struct rsc *input)
struct daio *daio = &dao->daio;
dao->ops->clear_left_input(dao);
dao->mgr->imap_add(dao->mgr, entry);
dao->imappers[i] = entry;
static int dao_set_right_input(struct dao *dao, struct rsc *input)
struct daio *daio = &dao->daio;
dao->ops->clear_right_input(dao);
dao->mgr->imap_add(dao->mgr, entry);
dao->imappers[daio->rscl.msr + i] = entry;
static int dao_clear_input(struct dao *dao, unsigned int start, unsigned int end)
if (!dao->imappers[start])
dao->mgr->imap_delete(dao->mgr, dao->imappers[i]);
dao->imappers[i] = NULL;
static int dao_clear_left_input(struct dao *dao)
return dao_clear_input(dao, 0, dao->daio.rscl.msr);
static int dao_clear_right_input(struct dao *dao)
return dao_clear_input(dao, dao->daio.rscl.msr,
dao->daio.rscl.msr + dao->daio.rscr.msr);
static int dao_rsc_init(struct dao *dao,
err = daio_rsc_init(&dao->daio, desc, mgr->mgr.hw);
dao->imappers = kzalloc(array3_size(sizeof(void *), desc->msr, 2),
if (!dao->imappers) {
dao->ops = &dao_ops;
dao->mgr = mgr;
dao->hw = hw;
err = hw->dao_get_ctrl_blk(&dao->ctrl_blk);
idx = daio_device_index(dao->daio.type, hw);
kfree(dao->imappers);
dao->imappers = NULL;
daio_rsc_uninit(&dao->daio);
static int dao_rsc_uninit(struct dao *dao)
if (dao->imappers) {
if (dao->imappers[0])
dao_clear_left_input(dao);
if (dao->imappers[dao->daio.rscl.msr])
dao_clear_right_input(dao);
kfree(dao->imappers);
dao->imappers = NULL;
dao->hw->dao_put_ctrl_blk(dao->ctrl_blk);
dao->hw = dao->ctrl_blk = NULL;
daio_rsc_uninit(&dao->daio);
static int dao_rsc_reinit(struct dao *dao, const struct dao_desc *desc)
struct daio_mgr *mgr = dao->mgr;
dsc.type = dao->daio.type;
dsc.output = dao->daio.output;
dao_rsc_uninit(dao);
return dao_rsc_init(dao, &dsc, mgr);
struct dao *dao = kzalloc(sizeof(*dao), GFP_KERNEL);
if (!dao)
err = dao_rsc_init(dao, desc, mgr);
kfree(dao);
*rdaio = &dao->daio;
dao_rsc_uninit(container_of(daio, struct dao, daio));
kfree(container_of(daio, struct dao, daio));
int (*set_spos)(struct dao *dao, unsigned int spos);
int (*commit_write)(struct dao *dao);
int (*get_spos)(struct dao *dao, unsigned int *spos);
int (*reinit)(struct dao *dao, const struct dao_desc *desc);
int (*set_left_input)(struct dao *dao, struct rsc *input);
int (*set_right_input)(struct dao *dao, struct rsc *input);
int (*clear_left_input)(struct dao *dao);
int (*clear_right_input)(struct dao *dao);