From 8cc72361481f00253f1e468ade5795427386d593 Mon Sep 17 00:00:00 2001 From: Wai Yew CHAY Date: Thu, 14 May 2009 08:05:58 +0200 Subject: ALSA: SB X-Fi driver merge MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Sound Blaster X-Fi driver supports Creative solutions based on 20K1 and 20K2 chipsets. Supported hardware : Creative Sound Blaster X-Fi Titanium Fatal1ty® Champion Series Creative Sound Blaster X-Fi Titanium Fatal1ty Professional Series Creative Sound Blaster X-Fi Titanium Professional Audio Creative Sound Blaster X-Fi Titanium Creative Sound Blaster X-Fi Elite Pro Creative Sound Blaster X-Fi Platinum Creative Sound Blaster X-Fi Fatal1ty Creative Sound Blaster X-Fi XtremeGamer Creative Sound Blaster X-Fi XtremeMusic Current release features: * ALSA PCM Playback * ALSA Record * ALSA Mixer Note: * External I/O modules detection not included. Signed-off-by: Wai Yew CHAY Singed-off-by: Ryan RICHARDS Signed-off-by: Takashi Iwai --- sound/pci/ctxfi/ctdaio.c | 769 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 769 insertions(+) create mode 100644 sound/pci/ctxfi/ctdaio.c (limited to 'sound/pci/ctxfi/ctdaio.c') diff --git a/sound/pci/ctxfi/ctdaio.c b/sound/pci/ctxfi/ctdaio.c new file mode 100644 index 000000000000..a2aea399eba1 --- /dev/null +++ b/sound/pci/ctxfi/ctdaio.c @@ -0,0 +1,769 @@ +/** + * Copyright (C) 2008, Creative Technology Ltd. All Rights Reserved. + * + * This source file is released under GPL v2 license (no other versions). + * See the COPYING file included in the main directory of this source + * distribution for the license terms and conditions. + * + * @File ctdaio.c + * + * @Brief + * This file contains the implementation of Digital Audio Input Output + * resource management object. + * + * @Author Liu Chun + * @Date May 23 2008 + * + */ + +#include "ctdaio.h" +#include "cthardware.h" +#include "ctimap.h" +#include +#include + +#define DAIO_RESOURCE_NUM NUM_DAIOTYP +#define DAIO_OUT_MAX SPDIFOO + +union daio_usage { + struct { + unsigned short lineo1:1; + unsigned short lineo2:1; + unsigned short lineo3:1; + unsigned short lineo4:1; + unsigned short spdifoo:1; + unsigned short lineim:1; + unsigned short spdifio:1; + unsigned short spdifi1:1; + } bf; + unsigned short data; +}; + +struct daio_rsc_idx { + unsigned short left; + unsigned short right; +}; + +struct daio_rsc_idx idx_20k1[NUM_DAIOTYP] = { + [LINEO1] = {.left = 0x00, .right = 0x01}, + [LINEO2] = {.left = 0x18, .right = 0x19}, + [LINEO3] = {.left = 0x08, .right = 0x09}, + [LINEO4] = {.left = 0x10, .right = 0x11}, + [LINEIM] = {.left = 0x1b5, .right = 0x1bd}, + [SPDIFOO] = {.left = 0x20, .right = 0x21}, + [SPDIFIO] = {.left = 0x15, .right = 0x1d}, + [SPDIFI1] = {.left = 0x95, .right = 0x9d}, +}; + +struct daio_rsc_idx idx_20k2[NUM_DAIOTYP] = { + [LINEO1] = {.left = 0x40, .right = 0x41}, + [LINEO2] = {.left = 0x70, .right = 0x71}, + [LINEO3] = {.left = 0x50, .right = 0x51}, + [LINEO4] = {.left = 0x60, .right = 0x61}, + [LINEIM] = {.left = 0x45, .right = 0xc5}, + [SPDIFOO] = {.left = 0x00, .right = 0x01}, + [SPDIFIO] = {.left = 0x05, .right = 0x85}, +}; + +static int daio_master(struct rsc *rsc) +{ + /* Actually, this is not the resource index of DAIO. + * For DAO, it is the input mapper index. And, for DAI, + * it is the output time-slot index. */ + return rsc->conj = rsc->idx; +} + +static int daio_index(const struct rsc *rsc) +{ + return rsc->conj; +} + +static int daio_out_next_conj(struct rsc *rsc) +{ + return rsc->conj += 2; +} + +static int daio_in_next_conj_20k1(struct rsc *rsc) +{ + return rsc->conj += 0x200; +} + +static int daio_in_next_conj_20k2(struct rsc *rsc) +{ + return rsc->conj += 0x100; +} + +static struct rsc_ops daio_out_rsc_ops = { + .master = daio_master, + .next_conj = daio_out_next_conj, + .index = daio_index, + .output_slot = NULL, +}; + +static struct rsc_ops daio_in_rsc_ops_20k1 = { + .master = daio_master, + .next_conj = daio_in_next_conj_20k1, + .index = NULL, + .output_slot = daio_index, +}; + +static struct rsc_ops daio_in_rsc_ops_20k2 = { + .master = daio_master, + .next_conj = daio_in_next_conj_20k2, + .index = NULL, + .output_slot = daio_index, +}; + +static unsigned int daio_device_index(enum DAIOTYP type, struct hw *hw) +{ + switch (hw->get_chip_type(hw)) { + case ATC20K1: + switch (type) { + case SPDIFOO: return 0; + case SPDIFIO: return 0; + case SPDIFI1: return 1; + case LINEO1: return 4; + case LINEO2: return 7; + case LINEO3: return 5; + case LINEO4: return 6; + case LINEIM: return 7; + default: return -EINVAL; + } + case ATC20K2: + switch (type) { + case SPDIFOO: return 0; + case SPDIFIO: return 0; + case LINEO1: return 4; + case LINEO2: return 7; + case LINEO3: return 5; + case LINEO4: return 6; + case LINEIM: return 4; + default: return -EINVAL; + } + default: + return -EINVAL; + } +} + +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) +{ + ((struct hw *)dao->hw)->dao_get_spos(dao->ctrl_blk, spos); + return 0; +} + +static int dao_spdif_set_spos(struct dao *dao, unsigned int spos) +{ + ((struct hw *)dao->hw)->dao_set_spos(dao->ctrl_blk, spos); + return 0; +} + +static int dao_commit_write(struct dao *dao) +{ + ((struct hw *)dao->hw)->dao_commit_write(dao->hw, + daio_device_index(dao->daio.type, dao->hw), dao->ctrl_blk); + return 0; +} + +static int dao_set_left_input(struct dao *dao, struct rsc *input) +{ + struct imapper *entry = NULL; + struct daio *daio = &dao->daio; + int i = 0; + + entry = kzalloc((sizeof(*entry) * daio->rscl.msr), GFP_KERNEL); + if (NULL == entry) + return -ENOMEM; + + /* Program master and conjugate resources */ + input->ops->master(input); + daio->rscl.ops->master(&daio->rscl); + for (i = 0; i < daio->rscl.msr; i++, entry++) { + entry->slot = input->ops->output_slot(input); + entry->user = entry->addr = daio->rscl.ops->index(&daio->rscl); + dao->mgr->imap_add(dao->mgr, entry); + dao->imappers[i] = entry; + + input->ops->next_conj(input); + daio->rscl.ops->next_conj(&daio->rscl); + } + input->ops->master(input); + daio->rscl.ops->master(&daio->rscl); + + return 0; +} + +static int dao_set_right_input(struct dao *dao, struct rsc *input) +{ + struct imapper *entry = NULL; + struct daio *daio = &dao->daio; + int i = 0; + + entry = kzalloc((sizeof(*entry) * daio->rscr.msr), GFP_KERNEL); + if (NULL == entry) + return -ENOMEM; + + /* Program master and conjugate resources */ + input->ops->master(input); + daio->rscr.ops->master(&daio->rscr); + for (i = 0; i < daio->rscr.msr; i++, entry++) { + entry->slot = input->ops->output_slot(input); + entry->user = entry->addr = daio->rscr.ops->index(&daio->rscr); + dao->mgr->imap_add(dao->mgr, entry); + dao->imappers[daio->rscl.msr + i] = entry; + + input->ops->next_conj(input); + daio->rscr.ops->next_conj(&daio->rscr); + } + input->ops->master(input); + daio->rscr.ops->master(&daio->rscr); + + return 0; +} + +static int dao_clear_left_input(struct dao *dao) +{ + struct imapper *entry = NULL; + struct daio *daio = &dao->daio; + int i = 0; + + if (NULL == dao->imappers[0]) + return 0; + + entry = dao->imappers[0]; + dao->mgr->imap_delete(dao->mgr, entry); + /* Program conjugate resources */ + for (i = 1; i < daio->rscl.msr; i++) { + entry = dao->imappers[i]; + dao->mgr->imap_delete(dao->mgr, entry); + dao->imappers[i] = NULL; + } + + kfree(dao->imappers[0]); + dao->imappers[0] = NULL; + + return 0; +} + +static int dao_clear_right_input(struct dao *dao) +{ + struct imapper *entry = NULL; + struct daio *daio = &dao->daio; + int i = 0; + + if (NULL == dao->imappers[daio->rscl.msr]) + return 0; + + entry = dao->imappers[daio->rscl.msr]; + dao->mgr->imap_delete(dao->mgr, entry); + /* Program conjugate resources */ + for (i = 1; i < daio->rscr.msr; i++) { + entry = dao->imappers[daio->rscl.msr + i]; + dao->mgr->imap_delete(dao->mgr, entry); + dao->imappers[daio->rscl.msr + i] = NULL; + } + + kfree(dao->imappers[daio->rscl.msr]); + dao->imappers[daio->rscl.msr] = NULL; + + return 0; +} + +static struct dao_rsc_ops dao_ops = { + .set_spos = dao_spdif_set_spos, + .commit_write = dao_commit_write, + .get_spos = dao_spdif_get_spos, + .reinit = dao_rsc_reinit, + .set_left_input = dao_set_left_input, + .set_right_input = dao_set_right_input, + .clear_left_input = dao_clear_left_input, + .clear_right_input = dao_clear_right_input, +}; + +static int dai_set_srt_srcl(struct dai *dai, struct rsc *src) +{ + src->ops->master(src); + ((struct hw *)dai->hw)->dai_srt_set_srcm(dai->ctrl_blk, + src->ops->index(src)); + return 0; +} + +static int dai_set_srt_srcr(struct dai *dai, struct rsc *src) +{ + src->ops->master(src); + ((struct hw *)dai->hw)->dai_srt_set_srco(dai->ctrl_blk, + src->ops->index(src)); + return 0; +} + +static int dai_set_srt_msr(struct dai *dai, unsigned int msr) +{ + unsigned int rsr = 0; + + for (rsr = 0; msr > 1; msr >>= 1) + rsr++; + + ((struct hw *)dai->hw)->dai_srt_set_rsr(dai->ctrl_blk, rsr); + return 0; +} + +static int dai_set_enb_src(struct dai *dai, unsigned int enb) +{ + ((struct hw *)dai->hw)->dai_srt_set_ec(dai->ctrl_blk, enb); + return 0; +} + +static int dai_set_enb_srt(struct dai *dai, unsigned int enb) +{ + ((struct hw *)dai->hw)->dai_srt_set_et(dai->ctrl_blk, enb); + return 0; +} + +static int dai_commit_write(struct dai *dai) +{ + ((struct hw *)dai->hw)->dai_commit_write(dai->hw, + daio_device_index(dai->daio.type, dai->hw), dai->ctrl_blk); + return 0; +} + +static struct dai_rsc_ops dai_ops = { + .set_srt_srcl = dai_set_srt_srcl, + .set_srt_srcr = dai_set_srt_srcr, + .set_srt_msr = dai_set_srt_msr, + .set_enb_src = dai_set_enb_src, + .set_enb_srt = dai_set_enb_srt, + .commit_write = dai_commit_write, +}; + +static int daio_rsc_init(struct daio *daio, + const struct daio_desc *desc, + void *hw) +{ + int err = 0; + unsigned int idx_l = 0, idx_r = 0; + + switch (((struct hw *)hw)->get_chip_type(hw)) { + case ATC20K1: + idx_l = idx_20k1[desc->type].left; + idx_r = idx_20k1[desc->type].right; + break; + case ATC20K2: + idx_l = idx_20k2[desc->type].left; + idx_r = idx_20k2[desc->type].right; + break; + default: + return -EINVAL; + } + err = rsc_init(&daio->rscl, idx_l, DAIO, desc->msr, hw); + if (err) + return err; + + err = rsc_init(&daio->rscr, idx_r, DAIO, desc->msr, hw); + if (err) + goto error1; + + /* Set daio->rscl/r->ops to daio specific ones */ + if (desc->type <= DAIO_OUT_MAX) { + daio->rscl.ops = daio->rscr.ops = &daio_out_rsc_ops; + } else { + switch (((struct hw *)hw)->get_chip_type(hw)) { + case ATC20K1: + daio->rscl.ops = daio->rscr.ops = &daio_in_rsc_ops_20k1; + break; + case ATC20K2: + daio->rscl.ops = daio->rscr.ops = &daio_in_rsc_ops_20k2; + break; + default: + break; + } + } + daio->type = desc->type; + + return 0; + +error1: + rsc_uninit(&daio->rscl); + return err; +} + +static int daio_rsc_uninit(struct daio *daio) +{ + rsc_uninit(&daio->rscl); + rsc_uninit(&daio->rscr); + + return 0; +} + +static int dao_rsc_init(struct dao *dao, + const struct daio_desc *desc, + struct daio_mgr *mgr) +{ + struct hw *hw = mgr->mgr.hw; + unsigned int conf = 0; + int err = 0; + + err = daio_rsc_init(&dao->daio, desc, mgr->mgr.hw); + if (err) + return err; + + dao->imappers = kzalloc(sizeof(void *)*desc->msr*2, GFP_KERNEL); + if (NULL == dao->imappers) { + err = -ENOMEM; + goto error1; + } + dao->ops = &dao_ops; + dao->mgr = mgr; + dao->hw = hw; + err = hw->dao_get_ctrl_blk(&dao->ctrl_blk); + if (err) + goto error2; + + hw->daio_mgr_dsb_dao(mgr->mgr.ctrl_blk, + daio_device_index(dao->daio.type, hw)); + hw->daio_mgr_commit_write(hw, mgr->mgr.ctrl_blk); + + conf |= (desc->msr & 0x7) | (desc->passthru << 3); + hw->daio_mgr_dao_init(mgr->mgr.ctrl_blk, + daio_device_index(dao->daio.type, hw), conf); + hw->daio_mgr_enb_dao(mgr->mgr.ctrl_blk, + daio_device_index(dao->daio.type, hw)); + hw->daio_mgr_commit_write(hw, mgr->mgr.ctrl_blk); + + return 0; + +error2: + kfree(dao->imappers); + dao->imappers = NULL; +error1: + daio_rsc_uninit(&dao->daio); + return err; +} + +static int dao_rsc_uninit(struct dao *dao) +{ + if (NULL != dao->imappers) { + if (NULL != dao->imappers[0]) + dao_clear_left_input(dao); + + if (NULL != dao->imappers[dao->daio.rscl.msr]) + dao_clear_right_input(dao); + + kfree(dao->imappers); + dao->imappers = NULL; + } + ((struct hw *)dao->hw)->dao_put_ctrl_blk(dao->ctrl_blk); + dao->hw = dao->ctrl_blk = NULL; + daio_rsc_uninit(&dao->daio); + + return 0; +} + +static int dao_rsc_reinit(struct dao *dao, const struct dao_desc *desc) +{ + struct daio_mgr *mgr = dao->mgr; + struct daio_desc dsc = {0}; + + dsc.type = dao->daio.type; + dsc.msr = desc->msr; + dsc.passthru = desc->passthru; + dao_rsc_uninit(dao); + return dao_rsc_init(dao, &dsc, mgr); +} + +static int dai_rsc_init(struct dai *dai, + const struct daio_desc *desc, + struct daio_mgr *mgr) +{ + int err = 0; + struct hw *hw = mgr->mgr.hw; + unsigned int rsr = 0, msr = 0; + + err = daio_rsc_init(&dai->daio, desc, mgr->mgr.hw); + if (err) + return err; + + dai->ops = &dai_ops; + dai->hw = mgr->mgr.hw; + err = hw->dai_get_ctrl_blk(&dai->ctrl_blk); + if (err) + goto error1; + + for (rsr = 0, msr = desc->msr; msr > 1; msr >>= 1) + rsr++; + + hw->dai_srt_set_rsr(dai->ctrl_blk, rsr); + hw->dai_srt_set_drat(dai->ctrl_blk, 0); + /* default to disabling control of a SRC */ + hw->dai_srt_set_ec(dai->ctrl_blk, 0); + hw->dai_srt_set_et(dai->ctrl_blk, 0); /* default to disabling SRT */ + hw->dai_commit_write(hw, + daio_device_index(dai->daio.type, dai->hw), dai->ctrl_blk); + + return 0; + +error1: + daio_rsc_uninit(&dai->daio); + return err; +} + +static int dai_rsc_uninit(struct dai *dai) +{ + ((struct hw *)dai->hw)->dai_put_ctrl_blk(dai->ctrl_blk); + dai->hw = dai->ctrl_blk = NULL; + daio_rsc_uninit(&dai->daio); + return 0; +} + +static int daio_mgr_get_rsc(struct rsc_mgr *mgr, enum DAIOTYP type) +{ + if (((union daio_usage *)mgr->rscs)->data & (0x1 << type)) + return -ENOENT; + + ((union daio_usage *)mgr->rscs)->data |= (0x1 << type); + + return 0; +} + +static int daio_mgr_put_rsc(struct rsc_mgr *mgr, enum DAIOTYP type) +{ + ((union daio_usage *)mgr->rscs)->data &= ~(0x1 << type); + + return 0; +} + +static int get_daio_rsc(struct daio_mgr *mgr, + const struct daio_desc *desc, + struct daio **rdaio) +{ + int err = 0; + struct dai *dai = NULL; + struct dao *dao = NULL; + unsigned long flags; + + *rdaio = NULL; + + /* Check whether there are sufficient daio resources to meet request. */ + spin_lock_irqsave(&mgr->mgr_lock, flags); + err = daio_mgr_get_rsc(&mgr->mgr, desc->type); + spin_unlock_irqrestore(&mgr->mgr_lock, flags); + if (err) { + printk(KERN_ERR "Can't meet DAIO resource request!\n"); + return err; + } + + /* Allocate mem for daio resource */ + if (desc->type <= DAIO_OUT_MAX) { + dao = kzalloc(sizeof(*dao), GFP_KERNEL); + if (NULL == dao) { + err = -ENOMEM; + goto error; + } + err = dao_rsc_init(dao, desc, mgr); + if (err) + goto error; + + *rdaio = &dao->daio; + } else { + dai = kzalloc(sizeof(*dai), GFP_KERNEL); + if (NULL == dai) { + err = -ENOMEM; + goto error; + } + err = dai_rsc_init(dai, desc, mgr); + if (err) + goto error; + + *rdaio = &dai->daio; + } + + mgr->daio_enable(mgr, *rdaio); + mgr->commit_write(mgr); + + return 0; + +error: + if (NULL != dao) + kfree(dao); + else if (NULL != dai) + kfree(dai); + + spin_lock_irqsave(&mgr->mgr_lock, flags); + daio_mgr_put_rsc(&mgr->mgr, desc->type); + spin_unlock_irqrestore(&mgr->mgr_lock, flags); + return err; +} + +static int put_daio_rsc(struct daio_mgr *mgr, struct daio *daio) +{ + unsigned long flags; + + mgr->daio_disable(mgr, daio); + mgr->commit_write(mgr); + + spin_lock_irqsave(&mgr->mgr_lock, flags); + daio_mgr_put_rsc(&mgr->mgr, daio->type); + spin_unlock_irqrestore(&mgr->mgr_lock, flags); + + if (daio->type <= DAIO_OUT_MAX) { + dao_rsc_uninit(container_of(daio, struct dao, daio)); + kfree(container_of(daio, struct dao, daio)); + } else { + dai_rsc_uninit(container_of(daio, struct dai, daio)); + kfree(container_of(daio, struct dai, daio)); + } + + return 0; +} + +static int daio_mgr_enb_daio(struct daio_mgr *mgr, struct daio *daio) +{ + struct hw *hw = mgr->mgr.hw; + + if (DAIO_OUT_MAX >= daio->type) { + hw->daio_mgr_enb_dao(mgr->mgr.ctrl_blk, + daio_device_index(daio->type, hw)); + } else { + hw->daio_mgr_enb_dai(mgr->mgr.ctrl_blk, + daio_device_index(daio->type, hw)); + } + return 0; +} + +static int daio_mgr_dsb_daio(struct daio_mgr *mgr, struct daio *daio) +{ + struct hw *hw = mgr->mgr.hw; + + if (DAIO_OUT_MAX >= daio->type) { + hw->daio_mgr_dsb_dao(mgr->mgr.ctrl_blk, + daio_device_index(daio->type, hw)); + } else { + hw->daio_mgr_dsb_dai(mgr->mgr.ctrl_blk, + daio_device_index(daio->type, hw)); + } + return 0; +} + +static int daio_map_op(void *data, struct imapper *entry) +{ + struct rsc_mgr *mgr = &((struct daio_mgr *)data)->mgr; + struct hw *hw = mgr->hw; + + hw->daio_mgr_set_imaparc(mgr->ctrl_blk, entry->slot); + hw->daio_mgr_set_imapnxt(mgr->ctrl_blk, entry->next); + hw->daio_mgr_set_imapaddr(mgr->ctrl_blk, entry->addr); + hw->daio_mgr_commit_write(mgr->hw, mgr->ctrl_blk); + + return 0; +} + +static int daio_imap_add(struct daio_mgr *mgr, struct imapper *entry) +{ + unsigned long flags; + int err = 0; + + spin_lock_irqsave(&mgr->imap_lock, flags); + if ((0 == entry->addr) && (mgr->init_imap_added)) { + input_mapper_delete(&mgr->imappers, mgr->init_imap, + daio_map_op, mgr); + mgr->init_imap_added = 0; + } + err = input_mapper_add(&mgr->imappers, entry, daio_map_op, mgr); + spin_unlock_irqrestore(&mgr->imap_lock, flags); + + return err; +} + +static int daio_imap_delete(struct daio_mgr *mgr, struct imapper *entry) +{ + unsigned long flags; + int err = 0; + + spin_lock_irqsave(&mgr->imap_lock, flags); + err = input_mapper_delete(&mgr->imappers, entry, daio_map_op, mgr); + if (list_empty(&mgr->imappers)) { + input_mapper_add(&mgr->imappers, mgr->init_imap, + daio_map_op, mgr); + mgr->init_imap_added = 1; + } + spin_unlock_irqrestore(&mgr->imap_lock, flags); + + return err; +} + +static int daio_mgr_commit_write(struct daio_mgr *mgr) +{ + struct hw *hw = mgr->mgr.hw; + + hw->daio_mgr_commit_write(hw, mgr->mgr.ctrl_blk); + return 0; +} + +int daio_mgr_create(void *hw, struct daio_mgr **rdaio_mgr) +{ + int err = 0, i = 0; + struct daio_mgr *daio_mgr; + struct imapper *entry; + + *rdaio_mgr = NULL; + daio_mgr = kzalloc(sizeof(*daio_mgr), GFP_KERNEL); + if (NULL == daio_mgr) + return -ENOMEM; + + err = rsc_mgr_init(&daio_mgr->mgr, DAIO, DAIO_RESOURCE_NUM, hw); + if (err) + goto error1; + + spin_lock_init(&daio_mgr->mgr_lock); + spin_lock_init(&daio_mgr->imap_lock); + INIT_LIST_HEAD(&daio_mgr->imappers); + entry = kzalloc(sizeof(*entry), GFP_KERNEL); + if (NULL == entry) { + err = -ENOMEM; + goto error2; + } + entry->slot = entry->addr = entry->next = entry->user = 0; + list_add(&entry->list, &daio_mgr->imappers); + daio_mgr->init_imap = entry; + daio_mgr->init_imap_added = 1; + + daio_mgr->get_daio = get_daio_rsc; + daio_mgr->put_daio = put_daio_rsc; + daio_mgr->daio_enable = daio_mgr_enb_daio; + daio_mgr->daio_disable = daio_mgr_dsb_daio; + daio_mgr->imap_add = daio_imap_add; + daio_mgr->imap_delete = daio_imap_delete; + daio_mgr->commit_write = daio_mgr_commit_write; + + for (i = 0; i < 8; i++) { + ((struct hw *)hw)->daio_mgr_dsb_dao(daio_mgr->mgr.ctrl_blk, i); + ((struct hw *)hw)->daio_mgr_dsb_dai(daio_mgr->mgr.ctrl_blk, i); + } + ((struct hw *)hw)->daio_mgr_commit_write(hw, daio_mgr->mgr.ctrl_blk); + + *rdaio_mgr = daio_mgr; + + return 0; + +error2: + rsc_mgr_uninit(&daio_mgr->mgr); +error1: + kfree(daio_mgr); + return err; +} + +int daio_mgr_destroy(struct daio_mgr *daio_mgr) +{ + unsigned long flags; + + /* free daio input mapper list */ + spin_lock_irqsave(&daio_mgr->imap_lock, flags); + free_input_mapper_list(&daio_mgr->imappers); + spin_unlock_irqrestore(&daio_mgr->imap_lock, flags); + + rsc_mgr_uninit(&daio_mgr->mgr); + kfree(daio_mgr); + + return 0; +} + -- cgit v1.2.3 From 514eef9c2a711b4c24b97bb456d39695a6fe1775 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Mon, 8 Jun 2009 14:57:57 +0200 Subject: ALSA: ctxfi - Remove useless initializations and cast Remove useless variable initializations and cast at the beginning of functions. Signed-off-by: Takashi Iwai --- sound/pci/ctxfi/ctamixer.c | 62 ++++++++-------- sound/pci/ctxfi/ctatc.c | 164 ++++++++++++++++++++++--------------------- sound/pci/ctxfi/ctdaio.c | 40 +++++------ sound/pci/ctxfi/cthardware.c | 6 +- sound/pci/ctxfi/cthw20k1.c | 82 +++++++++++----------- sound/pci/ctxfi/cthw20k2.c | 52 +++++++------- sound/pci/ctxfi/ctimap.c | 4 +- sound/pci/ctxfi/ctmixer.c | 60 ++++++++-------- sound/pci/ctxfi/ctresource.c | 6 +- sound/pci/ctxfi/ctsrc.c | 110 ++++++++++++++--------------- sound/pci/ctxfi/ctvmem.c | 12 ++-- 11 files changed, 301 insertions(+), 297 deletions(-) (limited to 'sound/pci/ctxfi/ctdaio.c') diff --git a/sound/pci/ctxfi/ctamixer.c b/sound/pci/ctxfi/ctamixer.c index 859e996ad728..a1db51b3ead8 100644 --- a/sound/pci/ctxfi/ctamixer.c +++ b/sound/pci/ctxfi/ctamixer.c @@ -58,9 +58,9 @@ static struct rsc_ops amixer_basic_rsc_ops = { static int amixer_set_input(struct amixer *amixer, struct rsc *rsc) { - struct hw *hw = NULL; + struct hw *hw; - hw = (struct hw *)amixer->rsc.hw; + hw = amixer->rsc.hw; hw->amixer_set_mode(amixer->rsc.ctrl_blk, AMIXER_Y_IMMEDIATE); amixer->input = rsc; if (NULL == rsc) @@ -75,9 +75,9 @@ static int amixer_set_input(struct amixer *amixer, struct rsc *rsc) /* y is a 14-bit immediate constant */ static int amixer_set_y(struct amixer *amixer, unsigned int y) { - struct hw *hw = NULL; + struct hw *hw; - hw = (struct hw *)amixer->rsc.hw; + hw = amixer->rsc.hw; hw->amixer_set_y(amixer->rsc.ctrl_blk, y); return 0; @@ -85,9 +85,9 @@ static int amixer_set_y(struct amixer *amixer, unsigned int y) static int amixer_set_invalid_squash(struct amixer *amixer, unsigned int iv) { - struct hw *hw = NULL; + struct hw *hw; - hw = (struct hw *)amixer->rsc.hw; + hw = amixer->rsc.hw; hw->amixer_set_iv(amixer->rsc.ctrl_blk, iv); return 0; @@ -95,9 +95,9 @@ static int amixer_set_invalid_squash(struct amixer *amixer, unsigned int iv) static int amixer_set_sum(struct amixer *amixer, struct sum *sum) { - struct hw *hw = NULL; + struct hw *hw; - hw = (struct hw *)amixer->rsc.hw; + hw = amixer->rsc.hw; amixer->sum = sum; if (NULL == sum) { hw->amixer_set_se(amixer->rsc.ctrl_blk, 0); @@ -112,13 +112,13 @@ static int amixer_set_sum(struct amixer *amixer, struct sum *sum) static int amixer_commit_write(struct amixer *amixer) { - struct hw *hw = NULL; - unsigned int index = 0; - int i = 0; - struct rsc *input = NULL; - struct sum *sum = NULL; + struct hw *hw; + unsigned int index; + int i; + struct rsc *input; + struct sum *sum; - hw = (struct hw *)amixer->rsc.hw; + hw = amixer->rsc.hw; input = amixer->input; sum = amixer->sum; @@ -158,10 +158,10 @@ static int amixer_commit_write(struct amixer *amixer) static int amixer_commit_raw_write(struct amixer *amixer) { - struct hw *hw = NULL; - unsigned int index = 0; + struct hw *hw; + unsigned int index; - hw = (struct hw *)amixer->rsc.hw; + hw = amixer->rsc.hw; index = amixer->rsc.ops->output_slot(&amixer->rsc); hw->amixer_commit_write(hw, index, amixer->rsc.ctrl_blk); @@ -170,9 +170,9 @@ static int amixer_commit_raw_write(struct amixer *amixer) static int amixer_get_y(struct amixer *amixer) { - struct hw *hw = NULL; + struct hw *hw; - hw = (struct hw *)amixer->rsc.hw; + hw = amixer->rsc.hw; return hw->amixer_get_y(amixer->rsc.ctrl_blk); } @@ -201,7 +201,7 @@ static int amixer_rsc_init(struct amixer *amixer, const struct amixer_desc *desc, struct amixer_mgr *mgr) { - int err = 0; + int err; err = rsc_init(&amixer->rsc, amixer->idx[0], AMIXER, desc->msr, mgr->mgr.hw); @@ -233,9 +233,9 @@ static int get_amixer_rsc(struct amixer_mgr *mgr, const struct amixer_desc *desc, struct amixer **ramixer) { - int err = 0, i = 0; - unsigned int idx = 0; - struct amixer *amixer = NULL; + int err, i; + unsigned int idx; + struct amixer *amixer; unsigned long flags; *ramixer = NULL; @@ -284,7 +284,7 @@ error: static int put_amixer_rsc(struct amixer_mgr *mgr, struct amixer *amixer) { unsigned long flags; - int i = 0; + int i; spin_lock_irqsave(&mgr->mgr_lock, flags); for (i = 0; i < amixer->rsc.msr; i++) @@ -299,7 +299,7 @@ static int put_amixer_rsc(struct amixer_mgr *mgr, struct amixer *amixer) int amixer_mgr_create(void *hw, struct amixer_mgr **ramixer_mgr) { - int err = 0; + int err; struct amixer_mgr *amixer_mgr; *ramixer_mgr = NULL; @@ -367,7 +367,7 @@ static int sum_rsc_init(struct sum *sum, const struct sum_desc *desc, struct sum_mgr *mgr) { - int err = 0; + int err; err = rsc_init(&sum->rsc, sum->idx[0], SUM, desc->msr, mgr->mgr.hw); if (err) @@ -388,9 +388,9 @@ static int get_sum_rsc(struct sum_mgr *mgr, const struct sum_desc *desc, struct sum **rsum) { - int err = 0, i = 0; - unsigned int idx = 0; - struct sum *sum = NULL; + int err, i; + unsigned int idx; + struct sum *sum; unsigned long flags; *rsum = NULL; @@ -438,7 +438,7 @@ error: static int put_sum_rsc(struct sum_mgr *mgr, struct sum *sum) { unsigned long flags; - int i = 0; + int i; spin_lock_irqsave(&mgr->mgr_lock, flags); for (i = 0; i < sum->rsc.msr; i++) @@ -453,7 +453,7 @@ static int put_sum_rsc(struct sum_mgr *mgr, struct sum *sum) int sum_mgr_create(void *hw, struct sum_mgr **rsum_mgr) { - int err = 0; + int err; struct sum_mgr *sum_mgr; *rsum_mgr = NULL; diff --git a/sound/pci/ctxfi/ctatc.c b/sound/pci/ctxfi/ctatc.c index 9b1324544db0..7898a375df0e 100644 --- a/sound/pci/ctxfi/ctatc.c +++ b/sound/pci/ctxfi/ctatc.c @@ -190,8 +190,8 @@ static unsigned int convert_format(snd_pcm_format_t snd_format) static unsigned int atc_get_pitch(unsigned int input_rate, unsigned int output_rate) { - unsigned int pitch = 0; - int b = 0; + unsigned int pitch; + int b; /* get pitch and convert to fixed-point 8.24 format. */ pitch = (input_rate / output_rate) << 24; @@ -241,12 +241,12 @@ static int atc_pcm_playback_prepare(struct ct_atc *atc, struct ct_atc_pcm *apcm) struct amixer_mgr *amixer_mgr = atc->rsc_mgrs[AMIXER]; struct src_desc desc = {0}; struct amixer_desc mix_dsc = {0}; - struct src *src = NULL; - struct amixer *amixer = NULL; - int err = 0; + struct src *src; + struct amixer *amixer; + int err; int n_amixer = apcm->substream->runtime->channels, i = 0; int device = apcm->substream->pcm->device; - unsigned int pitch = 0; + unsigned int pitch; unsigned long flags; if (NULL != apcm->src) { @@ -324,8 +324,8 @@ atc_pcm_release_resources(struct ct_atc *atc, struct ct_atc_pcm *apcm) struct srcimp_mgr *srcimp_mgr = atc->rsc_mgrs[SRCIMP]; struct amixer_mgr *amixer_mgr = atc->rsc_mgrs[AMIXER]; struct sum_mgr *sum_mgr = atc->rsc_mgrs[SUM]; - struct srcimp *srcimp = NULL; - int i = 0; + struct srcimp *srcimp; + int i; if (NULL != apcm->srcimps) { for (i = 0; i < apcm->n_srcimp; i++) { @@ -377,7 +377,7 @@ atc_pcm_release_resources(struct ct_atc *atc, struct ct_atc_pcm *apcm) static int atc_pcm_playback_start(struct ct_atc *atc, struct ct_atc_pcm *apcm) { - unsigned int max_cisz = 0; + unsigned int max_cisz; struct src *src = apcm->src; max_cisz = src->multi * src->rsc.msr; @@ -398,8 +398,8 @@ static int atc_pcm_playback_start(struct ct_atc *atc, struct ct_atc_pcm *apcm) static int atc_pcm_stop(struct ct_atc *atc, struct ct_atc_pcm *apcm) { - struct src *src = NULL; - int i = 0; + struct src *src; + int i; ct_timer_stop(apcm->timer); @@ -426,8 +426,8 @@ static int atc_pcm_playback_position(struct ct_atc *atc, struct ct_atc_pcm *apcm) { struct src *src = apcm->src; - u32 size = 0, max_cisz = 0; - int position = 0; + u32 size, max_cisz; + int position; position = src->ops->get_ca(src); @@ -449,7 +449,7 @@ struct src_node_conf_t { static void setup_src_node_conf(struct ct_atc *atc, struct ct_atc_pcm *apcm, struct src_node_conf_t *conf, int *n_srcc) { - unsigned int pitch = 0; + unsigned int pitch; /* get pitch and convert to fixed-point 8.24 format. */ pitch = atc_get_pitch((atc->rsr * atc->msr), @@ -494,14 +494,14 @@ atc_pcm_capture_get_resources(struct ct_atc *atc, struct ct_atc_pcm *apcm) struct amixer_mgr *amixer_mgr = atc->rsc_mgrs[AMIXER]; struct sum_mgr *sum_mgr = atc->rsc_mgrs[SUM]; struct src_desc src_dsc = {0}; - struct src *src = NULL; + struct src *src; struct srcimp_desc srcimp_dsc = {0}; - struct srcimp *srcimp = NULL; + struct srcimp *srcimp; struct amixer_desc mix_dsc = {0}; struct sum_desc sum_dsc = {0}; - unsigned int pitch = 0; - int multi = 0, err = 0, i = 0; - int n_srcimp = 0, n_amixer = 0, n_srcc = 0, n_sum = 0; + unsigned int pitch; + int multi, err, i; + int n_srcimp, n_amixer, n_srcc, n_sum; struct src_node_conf_t src_node_conf[2] = {{0} }; /* first release old resources */ @@ -518,8 +518,8 @@ atc_pcm_capture_get_resources(struct ct_atc *atc, struct ct_atc_pcm *apcm) setup_src_node_conf(atc, apcm, src_node_conf, &n_srcc); n_sum = (1 == multi) ? 1 : 0; - n_amixer += n_sum * 2 + n_srcc; - n_srcimp += n_srcc; + n_amixer = n_sum * 2 + n_srcc; + n_srcimp = n_srcc; if ((multi > 1) && (0x8000000 >= pitch)) { /* Need extra AMIXERs and SRCIMPs for special treatment * of interleaved recording of conjugate channels */ @@ -633,14 +633,14 @@ error1: static int atc_pcm_capture_prepare(struct ct_atc *atc, struct ct_atc_pcm *apcm) { - struct src *src = NULL; - struct amixer *amixer = NULL; - struct srcimp *srcimp = NULL; + struct src *src; + struct amixer *amixer; + struct srcimp *srcimp; struct ct_mixer *mixer = atc->mixer; - struct sum *mono = NULL; + struct sum *mono; struct rsc *out_ports[8] = {NULL}; - int err = 0, i = 0, j = 0, n_sum = 0, multi = 0; - unsigned int pitch = 0; + int err, i, j, n_sum, multi; + unsigned int pitch; int mix_base = 0, imp_base = 0; if (NULL != apcm->src) { @@ -714,9 +714,9 @@ static int atc_pcm_capture_prepare(struct ct_atc *atc, struct ct_atc_pcm *apcm) static int atc_pcm_capture_start(struct ct_atc *atc, struct ct_atc_pcm *apcm) { - struct src *src = NULL; + struct src *src; struct src_mgr *src_mgr = atc->rsc_mgrs[SRC]; - int i = 0, multi = 0; + int i, multi; if (apcm->started) return 0; @@ -776,10 +776,10 @@ static int spdif_passthru_playback_get_resources(struct ct_atc *atc, struct amixer_mgr *amixer_mgr = atc->rsc_mgrs[AMIXER]; struct src_desc desc = {0}; struct amixer_desc mix_dsc = {0}; - struct src *src = NULL; - int err = 0; - int n_amixer = apcm->substream->runtime->channels, i = 0; - unsigned int pitch = 0, rsr = atc->pll_rate; + struct src *src; + int err; + int n_amixer = apcm->substream->runtime->channels, i; + unsigned int pitch, rsr = atc->pll_rate; /* first release old resources */ atc->pcm_release_resources(atc, apcm); @@ -832,15 +832,24 @@ error1: return err; } +static int atc_pll_init(struct ct_atc *atc, int rate) +{ + struct hw *hw = atc->hw; + int err; + err = hw->pll_init(hw, rate); + atc->pll_rate = err ? 0 : rate; + return err; +} + static int spdif_passthru_playback_setup(struct ct_atc *atc, struct ct_atc_pcm *apcm) { struct dao *dao = container_of(atc->daios[SPDIFOO], struct dao, daio); unsigned long flags; unsigned int rate = apcm->substream->runtime->rate; - unsigned int status = 0; - int err = 0; - unsigned char iec958_con_fs = 0; + unsigned int status; + int err; + unsigned char iec958_con_fs; switch (rate) { case 48000: @@ -864,10 +873,8 @@ spdif_passthru_playback_setup(struct ct_atc *atc, struct ct_atc_pcm *apcm) dao->ops->set_spos(dao, status); dao->ops->commit_write(dao); } - if ((rate != atc->pll_rate) && (32000 != rate)) { - err = ((struct hw *)atc->hw)->pll_init(atc->hw, rate); - atc->pll_rate = err ? 0 : rate; - } + if ((rate != atc->pll_rate) && (32000 != rate)) + err = atc_pll_init(atc, rate); spin_unlock_irqrestore(&atc->atc_lock, flags); return err; @@ -876,11 +883,11 @@ spdif_passthru_playback_setup(struct ct_atc *atc, struct ct_atc_pcm *apcm) static int spdif_passthru_playback_prepare(struct ct_atc *atc, struct ct_atc_pcm *apcm) { - struct src *src = NULL; - struct amixer *amixer = NULL; - struct dao *dao = NULL; - int err = 0; - int i = 0; + struct src *src; + struct amixer *amixer; + struct dao *dao; + int err; + int i; unsigned long flags; if (NULL != apcm->src) @@ -924,7 +931,7 @@ static int atc_select_line_in(struct ct_atc *atc) { struct hw *hw = atc->hw; struct ct_mixer *mixer = atc->mixer; - struct src *src = NULL; + struct src *src; if (hw->is_adc_source_selected(hw, ADC_LINEIN)) return 0; @@ -946,7 +953,7 @@ static int atc_select_mic_in(struct ct_atc *atc) { struct hw *hw = atc->hw; struct ct_mixer *mixer = atc->mixer; - struct src *src = NULL; + struct src *src; if (hw->is_adc_source_selected(hw, ADC_MICIN)) return 0; @@ -1063,8 +1070,8 @@ static int atc_spdif_out_passthru(struct ct_atc *atc, unsigned char state) { unsigned long flags; struct dao_desc da_dsc = {0}; - struct dao *dao = NULL; - int err = 0; + struct dao *dao; + int err; struct ct_mixer *mixer = atc->mixer; struct rsc *rscs[2] = {NULL}; unsigned int spos = 0; @@ -1082,11 +1089,8 @@ static int atc_spdif_out_passthru(struct ct_atc *atc, unsigned char state) dao->ops->set_left_input(dao, rscs[0]); dao->ops->set_right_input(dao, rscs[1]); /* Restore PLL to atc->rsr if needed. */ - if (atc->pll_rate != atc->rsr) { - err = ((struct hw *)atc->hw)->pll_init(atc->hw, - atc->rsr); - atc->pll_rate = err ? 0 : atc->rsr; - } + if (atc->pll_rate != atc->rsr) + err = atc_pll_init(atc, atc->rsr); } dao->ops->set_spos(dao, spos); dao->ops->commit_write(dao); @@ -1097,15 +1101,15 @@ static int atc_spdif_out_passthru(struct ct_atc *atc, unsigned char state) static int ct_atc_destroy(struct ct_atc *atc) { - struct daio_mgr *daio_mgr = NULL; - struct dao *dao = NULL; - struct dai *dai = NULL; - struct daio *daio = NULL; - struct sum_mgr *sum_mgr = NULL; - struct src_mgr *src_mgr = NULL; - struct srcimp_mgr *srcimp_mgr = NULL; - struct srcimp *srcimp = NULL; - struct ct_mixer *mixer = NULL; + struct daio_mgr *daio_mgr; + struct dao *dao; + struct dai *dai; + struct daio *daio; + struct sum_mgr *sum_mgr; + struct src_mgr *src_mgr; + struct srcimp_mgr *srcimp_mgr; + struct srcimp *srcimp; + struct ct_mixer *mixer; int i = 0; if (NULL == atc) @@ -1279,9 +1283,9 @@ int __devinit ct_atc_create_alsa_devs(struct ct_atc *atc) static int __devinit atc_create_hw_devs(struct ct_atc *atc) { - struct hw *hw = NULL; + struct hw *hw; struct card_conf info = {0}; - int i = 0, err = 0; + int i, err; err = create_hw_obj(atc->pci, &hw); if (err) { @@ -1316,14 +1320,14 @@ static int __devinit atc_create_hw_devs(struct ct_atc *atc) static int __devinit atc_get_resources(struct ct_atc *atc) { struct daio_desc da_desc = {0}; - struct daio_mgr *daio_mgr = NULL; + struct daio_mgr *daio_mgr; struct src_desc src_dsc = {0}; - struct src_mgr *src_mgr = NULL; + struct src_mgr *src_mgr; struct srcimp_desc srcimp_dsc = {0}; - struct srcimp_mgr *srcimp_mgr = NULL; + struct srcimp_mgr *srcimp_mgr; struct sum_desc sum_dsc = {0}; - struct sum_mgr *sum_mgr = NULL; - int err = 0, i = 0; + struct sum_mgr *sum_mgr; + int err, i; unsigned short subsys_id; atc->daios = kzalloc(sizeof(void *)*(DAIONUM), GFP_KERNEL); @@ -1428,8 +1432,8 @@ atc_connect_dai(struct src_mgr *src_mgr, struct dai *dai, struct src **srcs, struct srcimp **srcimps) { struct rsc *rscs[2] = {NULL}; - struct src *src = NULL; - struct srcimp *srcimp = NULL; + struct src *src; + struct srcimp *srcimp; int i = 0; rscs[0] = &dai->daio.rscl; @@ -1464,13 +1468,13 @@ atc_connect_dai(struct src_mgr *src_mgr, struct dai *dai, static void __devinit atc_connect_resources(struct ct_atc *atc) { - struct dai *dai = NULL; - struct dao *dao = NULL; - struct src *src = NULL; - struct sum *sum = NULL; - struct ct_mixer *mixer = NULL; + struct dai *dai; + struct dao *dao; + struct src *src; + struct sum *sum; + struct ct_mixer *mixer; struct rsc *rscs[2] = {NULL}; - int i = 0, j = 0; + int i, j; mixer = atc->mixer; @@ -1553,11 +1557,11 @@ static struct ct_atc atc_preset __devinitdata = { int __devinit ct_atc_create(struct snd_card *card, struct pci_dev *pci, unsigned int rsr, unsigned int msr, struct ct_atc **ratc) { - struct ct_atc *atc = NULL; + struct ct_atc *atc; static struct snd_device_ops ops = { .dev_free = atc_dev_free, }; - int err = 0; + int err; *ratc = NULL; diff --git a/sound/pci/ctxfi/ctdaio.c b/sound/pci/ctxfi/ctdaio.c index a2aea399eba1..befead4eeaab 100644 --- a/sound/pci/ctxfi/ctdaio.c +++ b/sound/pci/ctxfi/ctdaio.c @@ -168,9 +168,9 @@ static int dao_commit_write(struct dao *dao) static int dao_set_left_input(struct dao *dao, struct rsc *input) { - struct imapper *entry = NULL; + struct imapper *entry; struct daio *daio = &dao->daio; - int i = 0; + int i; entry = kzalloc((sizeof(*entry) * daio->rscl.msr), GFP_KERNEL); if (NULL == entry) @@ -196,9 +196,9 @@ static int dao_set_left_input(struct dao *dao, struct rsc *input) static int dao_set_right_input(struct dao *dao, struct rsc *input) { - struct imapper *entry = NULL; + struct imapper *entry; struct daio *daio = &dao->daio; - int i = 0; + int i; entry = kzalloc((sizeof(*entry) * daio->rscr.msr), GFP_KERNEL); if (NULL == entry) @@ -224,9 +224,9 @@ static int dao_set_right_input(struct dao *dao, struct rsc *input) static int dao_clear_left_input(struct dao *dao) { - struct imapper *entry = NULL; + struct imapper *entry; struct daio *daio = &dao->daio; - int i = 0; + int i; if (NULL == dao->imappers[0]) return 0; @@ -248,9 +248,9 @@ static int dao_clear_left_input(struct dao *dao) static int dao_clear_right_input(struct dao *dao) { - struct imapper *entry = NULL; + struct imapper *entry; struct daio *daio = &dao->daio; - int i = 0; + int i; if (NULL == dao->imappers[daio->rscl.msr]) return 0; @@ -299,7 +299,7 @@ static int dai_set_srt_srcr(struct dai *dai, struct rsc *src) static int dai_set_srt_msr(struct dai *dai, unsigned int msr) { - unsigned int rsr = 0; + unsigned int rsr; for (rsr = 0; msr > 1; msr >>= 1) rsr++; @@ -340,8 +340,8 @@ static int daio_rsc_init(struct daio *daio, const struct daio_desc *desc, void *hw) { - int err = 0; - unsigned int idx_l = 0, idx_r = 0; + int err; + unsigned int idx_l, idx_r; switch (((struct hw *)hw)->get_chip_type(hw)) { case ATC20K1: @@ -400,8 +400,8 @@ static int dao_rsc_init(struct dao *dao, struct daio_mgr *mgr) { struct hw *hw = mgr->mgr.hw; - unsigned int conf = 0; - int err = 0; + unsigned int conf; + int err; err = daio_rsc_init(&dao->daio, desc, mgr->mgr.hw); if (err) @@ -423,7 +423,7 @@ static int dao_rsc_init(struct dao *dao, daio_device_index(dao->daio.type, hw)); hw->daio_mgr_commit_write(hw, mgr->mgr.ctrl_blk); - conf |= (desc->msr & 0x7) | (desc->passthru << 3); + conf = (desc->msr & 0x7) | (desc->passthru << 3); hw->daio_mgr_dao_init(mgr->mgr.ctrl_blk, daio_device_index(dao->daio.type, hw), conf); hw->daio_mgr_enb_dao(mgr->mgr.ctrl_blk, @@ -475,9 +475,9 @@ static int dai_rsc_init(struct dai *dai, const struct daio_desc *desc, struct daio_mgr *mgr) { - int err = 0; + int err; struct hw *hw = mgr->mgr.hw; - unsigned int rsr = 0, msr = 0; + unsigned int rsr, msr; err = daio_rsc_init(&dai->daio, desc, mgr->mgr.hw); if (err) @@ -536,7 +536,7 @@ static int get_daio_rsc(struct daio_mgr *mgr, const struct daio_desc *desc, struct daio **rdaio) { - int err = 0; + int err; struct dai *dai = NULL; struct dao *dao = NULL; unsigned long flags; @@ -660,7 +660,7 @@ static int daio_map_op(void *data, struct imapper *entry) static int daio_imap_add(struct daio_mgr *mgr, struct imapper *entry) { unsigned long flags; - int err = 0; + int err; spin_lock_irqsave(&mgr->imap_lock, flags); if ((0 == entry->addr) && (mgr->init_imap_added)) { @@ -677,7 +677,7 @@ static int daio_imap_add(struct daio_mgr *mgr, struct imapper *entry) static int daio_imap_delete(struct daio_mgr *mgr, struct imapper *entry) { unsigned long flags; - int err = 0; + int err; spin_lock_irqsave(&mgr->imap_lock, flags); err = input_mapper_delete(&mgr->imappers, entry, daio_map_op, mgr); @@ -701,7 +701,7 @@ static int daio_mgr_commit_write(struct daio_mgr *mgr) int daio_mgr_create(void *hw, struct daio_mgr **rdaio_mgr) { - int err = 0, i = 0; + int err, i; struct daio_mgr *daio_mgr; struct imapper *entry; diff --git a/sound/pci/ctxfi/cthardware.c b/sound/pci/ctxfi/cthardware.c index 53d1acadc0e8..5ec6813d3911 100644 --- a/sound/pci/ctxfi/cthardware.c +++ b/sound/pci/ctxfi/cthardware.c @@ -22,7 +22,7 @@ static enum CHIPTYP __devinitdata get_chip_type(struct hw *hw) { - enum CHIPTYP type = ATCNONE; + enum CHIPTYP type; switch (hw->pci->device) { case 0x0005: /* 20k1 device */ @@ -41,7 +41,7 @@ static enum CHIPTYP __devinitdata get_chip_type(struct hw *hw) int __devinit create_hw_obj(struct pci_dev *pci, struct hw **rhw) { - int err = 0; + int err; switch (pci->device) { case 0x0005: /* 20k1 device */ @@ -65,7 +65,7 @@ int __devinit create_hw_obj(struct pci_dev *pci, struct hw **rhw) int destroy_hw_obj(struct hw *hw) { - int err = 0; + int err; switch (hw->pci->device) { case 0x0005: /* 20k1 device */ diff --git a/sound/pci/ctxfi/cthw20k1.c b/sound/pci/ctxfi/cthw20k1.c index b165466e1a54..38b87b6ee6d4 100644 --- a/sound/pci/ctxfi/cthw20k1.c +++ b/sound/pci/ctxfi/cthw20k1.c @@ -369,7 +369,7 @@ static unsigned int src_param_pitch_mixer(unsigned int src_idx) static int src_commit_write(struct hw *hw, unsigned int idx, void *blk) { struct src_rsc_ctrl_blk *ctl = blk; - int i = 0; + int i; if (ctl->dirty.bf.czbfs) { /* Clear Z-Buffer registers */ @@ -468,8 +468,8 @@ static int src_mgr_dsb_src(void *blk, unsigned int idx) static int src_mgr_commit_write(struct hw *hw, void *blk) { struct src_mgr_ctrl_blk *ctl = blk; - int i = 0; - unsigned int ret = 0; + int i; + unsigned int ret; if (ctl->dirty.bf.enbsa) { do { @@ -1108,7 +1108,7 @@ static int daio_mgr_set_imapaddr(void *blk, unsigned int addr) static int daio_mgr_commit_write(struct hw *hw, void *blk) { struct daio_mgr_ctrl_blk *ctl = blk; - int i = 0; + int i; if (ctl->dirty.bf.i2sictl || ctl->dirty.bf.i2soctl) { for (i = 0; i < 4; i++) { @@ -1212,8 +1212,8 @@ struct trn_conf { static int hw_daio_init(struct hw *hw, const struct daio_conf *info) { - u32 i2sorg = 0; - u32 spdorg = 0; + u32 i2sorg; + u32 spdorg; /* Read I2S CTL. Keep original value. */ /*i2sorg = hw_read_20kx(hw, I2SCTL);*/ @@ -1263,8 +1263,8 @@ static int hw_daio_init(struct hw *hw, const struct daio_conf *info) /* TRANSPORT operations */ static int hw_trn_init(struct hw *hw, const struct trn_conf *info) { - u32 trnctl = 0; - unsigned long ptp_phys_low = 0, ptp_phys_high = 0; + u32 trnctl; + u32 ptp_phys_low, ptp_phys_high; /* Set up device page table */ if ((~0UL) == info->vm_pgt_phys) { @@ -1316,7 +1316,7 @@ static int hw_trn_init(struct hw *hw, const struct trn_conf *info) static int hw_pll_init(struct hw *hw, unsigned int rsr) { unsigned int pllctl; - int i = 0; + int i; pllctl = (48000 == rsr) ? 0x1480a001 : 0x1480a731; for (i = 0; i < 3; i++) { @@ -1384,7 +1384,7 @@ static void i2c_lock(struct hw *hw) static void i2c_write(struct hw *hw, u32 device, u32 addr, u32 data) { - unsigned int ret = 0; + unsigned int ret; do { ret = hw_read_pci(hw, 0xEC); @@ -1397,9 +1397,9 @@ static void i2c_write(struct hw *hw, u32 device, u32 addr, u32 data) static int hw_reset_dac(struct hw *hw) { - u32 i = 0; - u16 gpioorg = 0; - unsigned int ret = 0; + u32 i; + u16 gpioorg; + unsigned int ret; if (i2c_unlock(hw)) return -1; @@ -1430,10 +1430,10 @@ static int hw_reset_dac(struct hw *hw) static int hw_dac_init(struct hw *hw, const struct dac_conf *info) { - u32 data = 0; - u16 gpioorg = 0; - u16 subsys_id = 0; - unsigned int ret = 0; + u32 data; + u16 gpioorg; + u16 subsys_id; + unsigned int ret; pci_read_config_word(hw->pci, PCI_SUBSYSTEM_ID, &subsys_id); if ((subsys_id == 0x0022) || (subsys_id == 0x002F)) { @@ -1494,13 +1494,12 @@ static int hw_dac_init(struct hw *hw, const struct dac_conf *info) static int is_adc_input_selected_SB055x(struct hw *hw, enum ADCSRC type) { - u32 data = 0; - return data; + return 0; } static int is_adc_input_selected_SBx(struct hw *hw, enum ADCSRC type) { - u32 data = 0; + u32 data; data = hw_read_20kx(hw, GPIO); switch (type) { @@ -1521,7 +1520,7 @@ static int is_adc_input_selected_SBx(struct hw *hw, enum ADCSRC type) static int is_adc_input_selected_hendrix(struct hw *hw, enum ADCSRC type) { - u32 data = 0; + u32 data; data = hw_read_20kx(hw, GPIO); switch (type) { @@ -1539,7 +1538,7 @@ static int is_adc_input_selected_hendrix(struct hw *hw, enum ADCSRC type) static int hw_is_adc_input_selected(struct hw *hw, enum ADCSRC type) { - u16 subsys_id = 0; + u16 subsys_id; pci_read_config_word(hw->pci, PCI_SUBSYSTEM_ID, &subsys_id); if ((subsys_id == 0x0022) || (subsys_id == 0x002F)) { @@ -1559,7 +1558,7 @@ static int hw_is_adc_input_selected(struct hw *hw, enum ADCSRC type) static int adc_input_select_SB055x(struct hw *hw, enum ADCSRC type, unsigned char boost) { - u32 data = 0; + u32 data; /* * check and set the following GPIO bits accordingly @@ -1599,9 +1598,9 @@ adc_input_select_SB055x(struct hw *hw, enum ADCSRC type, unsigned char boost) static int adc_input_select_SBx(struct hw *hw, enum ADCSRC type, unsigned char boost) { - u32 data = 0; - u32 i2c_data = 0; - unsigned int ret = 0; + u32 data; + u32 i2c_data; + unsigned int ret; if (i2c_unlock(hw)) return -1; @@ -1649,9 +1648,9 @@ adc_input_select_SBx(struct hw *hw, enum ADCSRC type, unsigned char boost) static int adc_input_select_hendrix(struct hw *hw, enum ADCSRC type, unsigned char boost) { - u32 data = 0; - u32 i2c_data = 0; - unsigned int ret = 0; + u32 data; + u32 i2c_data; + unsigned int ret; if (i2c_unlock(hw)) return -1; @@ -1693,7 +1692,7 @@ adc_input_select_hendrix(struct hw *hw, enum ADCSRC type, unsigned char boost) static int hw_adc_input_select(struct hw *hw, enum ADCSRC type) { - u16 subsys_id = 0; + u16 subsys_id; pci_read_config_word(hw->pci, PCI_SUBSYSTEM_ID, &subsys_id); if ((subsys_id == 0x0022) || (subsys_id == 0x002F)) { @@ -1719,8 +1718,8 @@ static int adc_init_SBx(struct hw *hw, int input, int mic20db) { u16 gpioorg; u16 input_source; - u32 adcdata = 0; - unsigned int ret = 0; + u32 adcdata; + unsigned int ret; input_source = 0x100; /* default to analog */ switch (input) { @@ -1742,6 +1741,7 @@ static int adc_init_SBx(struct hw *hw, int input, int mic20db) input_source = 0x0; /* set to Digital */ break; default: + adcdata = 0x0; break; } @@ -1781,8 +1781,8 @@ static int adc_init_SBx(struct hw *hw, int input, int mic20db) static int hw_adc_init(struct hw *hw, const struct adc_conf *info) { - int err = 0; - u16 subsys_id = 0; + int err; + u16 subsys_id; pci_read_config_word(hw->pci, PCI_SUBSYSTEM_ID, &subsys_id); if ((subsys_id == 0x0022) || (subsys_id == 0x002F)) { @@ -1797,7 +1797,7 @@ static int hw_adc_init(struct hw *hw, const struct adc_conf *info) static int hw_have_digit_io_switch(struct hw *hw) { - u16 subsys_id = 0; + u16 subsys_id; pci_read_config_word(hw->pci, PCI_SUBSYSTEM_ID, &subsys_id); /* SB073x and Vista compatible cards have no digit IO switch */ @@ -1814,11 +1814,11 @@ static int uaa_to_xfi(struct pci_dev *pci) { unsigned int bar0, bar1, bar2, bar3, bar4, bar5; unsigned int cmd, irq, cl_size, l_timer, pwr; - unsigned int is_uaa = 0; + unsigned int is_uaa; unsigned int data[4] = {0}; unsigned int io_base; void *mem_base; - int i = 0; + int i; const u32 CTLX = CTLBITS('C', 'T', 'L', 'X'); const u32 CTL_ = CTLBITS('C', 'T', 'L', '-'); const u32 CTLF = CTLBITS('C', 'T', 'L', 'F'); @@ -1916,9 +1916,9 @@ static irqreturn_t ct_20k1_interrupt(int irq, void *dev_id) static int hw_card_start(struct hw *hw) { - int err = 0; + int err; struct pci_dev *pci = hw->pci; - u16 subsys_id = 0; + u16 subsys_id; err = pci_enable_device(pci); if (err < 0) @@ -2004,8 +2004,8 @@ static int hw_card_init(struct hw *hw, struct card_conf *info) { int err; unsigned int gctl; - u16 subsys_id = 0; - u32 data = 0; + u16 subsys_id; + u32 data; struct dac_conf dac_info = {0}; struct adc_conf adc_info = {0}; struct daio_conf daio_info = {0}; diff --git a/sound/pci/ctxfi/cthw20k2.c b/sound/pci/ctxfi/cthw20k2.c index edbfb4827469..7d6dcbaf5244 100644 --- a/sound/pci/ctxfi/cthw20k2.c +++ b/sound/pci/ctxfi/cthw20k2.c @@ -168,7 +168,7 @@ static int src_get_rsc_ctrl_blk(void **rblk) static int src_put_rsc_ctrl_blk(void *blk) { - kfree((struct src_rsc_ctrl_blk *)blk); + kfree(blk); return 0; } @@ -359,7 +359,7 @@ static unsigned int src_param_pitch_mixer(unsigned int src_idx) static int src_commit_write(struct hw *hw, unsigned int idx, void *blk) { struct src_rsc_ctrl_blk *ctl = blk; - int i = 0; + int i; if (ctl->dirty.bf.czbfs) { /* Clear Z-Buffer registers */ @@ -458,8 +458,8 @@ static int src_mgr_dsb_src(void *blk, unsigned int idx) static int src_mgr_commit_write(struct hw *hw, void *blk) { struct src_mgr_ctrl_blk *ctl = blk; - int i = 0; - unsigned int ret = 0; + int i; + unsigned int ret; if (ctl->dirty.bf.enbsa) { do { @@ -494,7 +494,7 @@ static int src_mgr_get_ctrl_blk(void **rblk) static int src_mgr_put_ctrl_blk(void *blk) { - kfree((struct src_mgr_ctrl_blk *)blk); + kfree(blk); return 0; } @@ -515,7 +515,7 @@ static int srcimp_mgr_get_ctrl_blk(void **rblk) static int srcimp_mgr_put_ctrl_blk(void *blk) { - kfree((struct srcimp_mgr_ctrl_blk *)blk); + kfree(blk); return 0; } @@ -704,7 +704,7 @@ static int amixer_rsc_get_ctrl_blk(void **rblk) static int amixer_rsc_put_ctrl_blk(void *blk) { - kfree((struct amixer_rsc_ctrl_blk *)blk); + kfree(blk); return 0; } @@ -893,7 +893,7 @@ static int dai_get_ctrl_blk(void **rblk) static int dai_put_ctrl_blk(void *blk) { - kfree((struct dai_ctrl_blk *)blk); + kfree(blk); return 0; } @@ -943,7 +943,7 @@ static int dao_get_ctrl_blk(void **rblk) static int dao_put_ctrl_blk(void *blk) { - kfree((struct dao_ctrl_blk *)blk); + kfree(blk); return 0; } @@ -1051,8 +1051,8 @@ static int daio_mgr_set_imapaddr(void *blk, unsigned int addr) static int daio_mgr_commit_write(struct hw *hw, void *blk) { struct daio_mgr_ctrl_blk *ctl = blk; - unsigned int data = 0; - int i = 0; + unsigned int data; + int i; for (i = 0; i < 8; i++) { if ((ctl->dirty.bf.atxctl & (0x1 << i))) { @@ -1080,7 +1080,7 @@ static int daio_mgr_commit_write(struct hw *hw, void *blk) static int daio_mgr_get_ctrl_blk(struct hw *hw, void **rblk) { struct daio_mgr_ctrl_blk *blk; - int i = 0; + int i; *rblk = NULL; blk = kzalloc(sizeof(*blk), GFP_KERNEL); @@ -1099,7 +1099,7 @@ static int daio_mgr_get_ctrl_blk(struct hw *hw, void **rblk) static int daio_mgr_put_ctrl_blk(void *blk) { - kfree((struct daio_mgr_ctrl_blk *)blk); + kfree(blk); return 0; } @@ -1125,7 +1125,7 @@ struct trn_conf { static int hw_daio_init(struct hw *hw, const struct daio_conf *info) { - u32 dwData = 0; + u32 dwData; int i; /* Program I2S with proper sample rate and enable the correct I2S @@ -1195,9 +1195,9 @@ static int hw_daio_init(struct hw *hw, const struct daio_conf *info) /* TRANSPORT operations */ static int hw_trn_init(struct hw *hw, const struct trn_conf *info) { - u32 vmctl = 0, data = 0; - unsigned long ptp_phys_low = 0, ptp_phys_high = 0; - int i = 0; + u32 vmctl, data; + u32 ptp_phys_low, ptp_phys_high; + int i; /* Set up device page table */ if ((~0UL) == info->vm_pgt_phys) { @@ -1433,7 +1433,7 @@ static int I2CLockChip(struct hw *hw) static int I2CInit(struct hw *hw, u8 bDeviceID, u8 bAddressSize, u8 bDataSize) { - int err = 0; + int err; unsigned int RegI2CStatus; unsigned int RegI2CAddress; @@ -1481,7 +1481,7 @@ static int I2CUninit(struct hw *hw) static int I2CWaitDataReady(struct hw *hw) { int i = 0x400000; - unsigned int ret = 0; + unsigned int ret; do { ret = hw_read_20kx(hw, I2C_IF_STATUS); @@ -1541,9 +1541,9 @@ static int I2CWrite(struct hw *hw, u16 wAddress, u32 dwData) static int hw_dac_init(struct hw *hw, const struct dac_conf *info) { - int err = 0; - u32 dwData = 0; - int i = 0; + int err; + u32 dwData; + int i; struct REGS_CS4382 cs4382_Read = {0}; struct REGS_CS4382 cs4382_Def = { 0x00000001, /* Mode Control 1 */ @@ -1696,7 +1696,7 @@ End: static int hw_is_adc_input_selected(struct hw *hw, enum ADCSRC type) { - u32 data = 0; + u32 data; data = hw_read_20kx(hw, GPIO_DATA); switch (type) { @@ -1714,7 +1714,7 @@ static int hw_is_adc_input_selected(struct hw *hw, enum ADCSRC type) static int hw_adc_input_select(struct hw *hw, enum ADCSRC type) { - u32 data = 0; + u32 data; data = hw_read_20kx(hw, GPIO_DATA); switch (type) { @@ -1747,8 +1747,8 @@ static int hw_adc_input_select(struct hw *hw, enum ADCSRC type) static int hw_adc_init(struct hw *hw, const struct adc_conf *info) { - int err = 0; - u32 dwMux = 2, dwData = 0, dwCtl = 0; + int err; + u32 dwMux = 2, dwData, dwCtl; /* Set ADC reset bit as output */ dwData = hw_read_20kx(hw, GPIO_CTRL); diff --git a/sound/pci/ctxfi/ctimap.c b/sound/pci/ctxfi/ctimap.c index d34eacd902ce..0b73368a4df6 100644 --- a/sound/pci/ctxfi/ctimap.c +++ b/sound/pci/ctxfi/ctimap.c @@ -99,8 +99,8 @@ int input_mapper_delete(struct list_head *mappers, struct imapper *entry, void free_input_mapper_list(struct list_head *head) { - struct imapper *entry = NULL; - struct list_head *pos = NULL; + struct imapper *entry; + struct list_head *pos; while (!list_empty(head)) { pos = head->next; diff --git a/sound/pci/ctxfi/ctmixer.c b/sound/pci/ctxfi/ctmixer.c index 796156e4bd38..666722d9de41 100644 --- a/sound/pci/ctxfi/ctmixer.c +++ b/sound/pci/ctxfi/ctmixer.c @@ -298,7 +298,7 @@ set_switch_state(struct ct_mixer *mixer, * from 2^-6 to (1+1023/1024) */ static unsigned int uint16_to_float14(unsigned int x) { - unsigned int i = 0; + unsigned int i; if (x < 17) return 0; @@ -318,7 +318,7 @@ static unsigned int uint16_to_float14(unsigned int x) static unsigned int float14_to_uint16(unsigned int x) { - unsigned int e = 0; + unsigned int e; if (!x) return x; @@ -491,7 +491,7 @@ static int ct_alsa_mix_switch_put(struct snd_kcontrol *kcontrol, struct ct_atc *atc = snd_kcontrol_chip(kcontrol); struct ct_mixer *mixer = atc->mixer; enum CTALSA_MIXER_CTL type = kcontrol->private_value; - int state = 0; + int state; state = ucontrol->value.integer.value[0]; if (get_switch_state(mixer, type) == state) @@ -574,7 +574,7 @@ static int ct_spdif_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct ct_atc *atc = snd_kcontrol_chip(kcontrol); - unsigned int status = 0; + unsigned int status; atc->spdif_out_get_status(atc, &status); ucontrol->value.iec958.status[0] = (status >> 0) & 0xff; @@ -589,8 +589,8 @@ static int ct_spdif_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct ct_atc *atc = snd_kcontrol_chip(kcontrol); - int change = 1; - unsigned int status = 0, old_status = 0; + int change; + unsigned int status, old_status; status = (ucontrol->value.iec958.status[0] << 0) | (ucontrol->value.iec958.status[1] << 8) | @@ -641,8 +641,8 @@ static struct snd_kcontrol_new iec958_ctl = { static int ct_mixer_kcontrol_new(struct ct_mixer *mixer, struct snd_kcontrol_new *new) { - struct snd_kcontrol *kctl = NULL; - int err = 0; + struct snd_kcontrol *kctl; + int err; kctl = snd_ctl_new1(new, mixer->atc); if (NULL == kctl) @@ -669,9 +669,9 @@ ct_mixer_kcontrol_new(struct ct_mixer *mixer, struct snd_kcontrol_new *new) static int ct_mixer_kcontrols_create(struct ct_mixer *mixer) { - enum CTALSA_MIXER_CTL type = 0; + enum CTALSA_MIXER_CTL type; struct ct_atc *atc = mixer->atc; - int err = 0; + int err; /* Create snd kcontrol instances on demand */ for (type = VOL_MIXER_START; type <= VOL_MIXER_END; type++) { @@ -733,9 +733,9 @@ static int ct_mixer_kcontrols_create(struct ct_mixer *mixer) static void ct_mixer_recording_select(struct ct_mixer *mixer, enum CT_AMIXER_CTL type) { - struct amixer *amix_d = NULL; - struct sum *sum_c = NULL; - int i = 0; + struct amixer *amix_d; + struct sum *sum_c; + int i; for (i = 0; i < 2; i++) { amix_d = mixer->amixers[type*CHN_NUM+i]; @@ -748,8 +748,8 @@ ct_mixer_recording_select(struct ct_mixer *mixer, enum CT_AMIXER_CTL type) static void ct_mixer_recording_unselect(struct ct_mixer *mixer, enum CT_AMIXER_CTL type) { - struct amixer *amix_d = NULL; - int i = 0; + struct amixer *amix_d; + int i; for (i = 0; i < 2; i++) { amix_d = mixer->amixers[type*CHN_NUM+i]; @@ -760,14 +760,14 @@ ct_mixer_recording_unselect(struct ct_mixer *mixer, enum CT_AMIXER_CTL type) static int ct_mixer_get_resources(struct ct_mixer *mixer) { - struct sum_mgr *sum_mgr = NULL; - struct sum *sum = NULL; + struct sum_mgr *sum_mgr; + struct sum *sum; struct sum_desc sum_desc = {0}; - struct amixer_mgr *amixer_mgr = NULL; - struct amixer *amixer = NULL; + struct amixer_mgr *amixer_mgr; + struct amixer *amixer; struct amixer_desc am_desc = {0}; - int err = 0; - int i = 0; + int err; + int i; /* Allocate sum resources for mixer obj */ sum_mgr = (struct sum_mgr *)mixer->atc->rsc_mgrs[SUM]; @@ -822,8 +822,8 @@ error1: static int ct_mixer_get_mem(struct ct_mixer **rmixer) { - struct ct_mixer *mixer = NULL; - int err = 0; + struct ct_mixer *mixer; + int err; *rmixer = NULL; /* Allocate mem for mixer obj */ @@ -855,9 +855,9 @@ error1: static int ct_mixer_topology_build(struct ct_mixer *mixer) { - struct sum *sum = NULL; - struct amixer *amix_d = NULL, *amix_s = NULL; - enum CT_AMIXER_CTL i = 0, j = 0; + struct sum *sum; + struct amixer *amix_d, *amix_s; + enum CT_AMIXER_CTL i, j; /* Build topology from destination to source */ @@ -1044,7 +1044,7 @@ int ct_mixer_destroy(struct ct_mixer *mixer) struct sum_mgr *sum_mgr = (struct sum_mgr *)mixer->atc->rsc_mgrs[SUM]; struct amixer_mgr *amixer_mgr = (struct amixer_mgr *)mixer->atc->rsc_mgrs[AMIXER]; - struct amixer *amixer = NULL; + struct amixer *amixer; int i = 0; /* Release amixer resources */ @@ -1071,8 +1071,8 @@ int ct_mixer_destroy(struct ct_mixer *mixer) int ct_mixer_create(struct ct_atc *atc, struct ct_mixer **rmixer) { - struct ct_mixer *mixer = NULL; - int err = 0; + struct ct_mixer *mixer; + int err; *rmixer = NULL; @@ -1109,7 +1109,7 @@ int ct_alsa_mix_create(struct ct_atc *atc, enum CTALSADEVS device, const char *device_name) { - int err = 0; + int err; /* Create snd kcontrol instances on demand */ /* vol_ctl.device = swh_ctl.device = device; */ /* better w/ device 0 */ diff --git a/sound/pci/ctxfi/ctresource.c b/sound/pci/ctxfi/ctresource.c index da21a717a07a..889c495bb7d1 100644 --- a/sound/pci/ctxfi/ctresource.c +++ b/sound/pci/ctxfi/ctresource.c @@ -27,7 +27,7 @@ static int get_resource(u8 *rscs, unsigned int amount, unsigned int multi, unsigned int *ridx) { - int i = 0, j = 0, k = 0, n = 0; + int i, j, k, n; /* Check whether there are sufficient resources to meet request. */ for (i = 0, n = multi; i < amount; i++) { @@ -61,7 +61,7 @@ get_resource(u8 *rscs, unsigned int amount, static int put_resource(u8 *rscs, unsigned int multi, unsigned int idx) { - unsigned int i = 0, j = 0, k = 0, n = 0; + unsigned int i, j, k, n; /* Mark the contiguous bits in resource bit-map as used */ for (n = multi, i = idx; n > 0; n--) { @@ -76,7 +76,7 @@ static int put_resource(u8 *rscs, unsigned int multi, unsigned int idx) int mgr_get_resource(struct rsc_mgr *mgr, unsigned int n, unsigned int *ridx) { - int err = 0; + int err; if (n > mgr->avail) return -ENOENT; diff --git a/sound/pci/ctxfi/ctsrc.c b/sound/pci/ctxfi/ctsrc.c index 77e118c5bc97..e1c145d8b702 100644 --- a/sound/pci/ctxfi/ctsrc.c +++ b/sound/pci/ctxfi/ctsrc.c @@ -37,9 +37,9 @@ static int (*src_default_config[3])(struct src *) = { static int src_set_state(struct src *src, unsigned int state) { - struct hw *hw = NULL; + struct hw *hw; - hw = (struct hw *)src->rsc.hw; + hw = src->rsc.hw; hw->src_set_state(src->rsc.ctrl_blk, state); return 0; @@ -47,9 +47,9 @@ static int src_set_state(struct src *src, unsigned int state) static int src_set_bm(struct src *src, unsigned int bm) { - struct hw *hw = NULL; + struct hw *hw; - hw = (struct hw *)src->rsc.hw; + hw = src->rsc.hw; hw->src_set_bm(src->rsc.ctrl_blk, bm); return 0; @@ -57,9 +57,9 @@ static int src_set_bm(struct src *src, unsigned int bm) static int src_set_sf(struct src *src, unsigned int sf) { - struct hw *hw = NULL; + struct hw *hw; - hw = (struct hw *)src->rsc.hw; + hw = src->rsc.hw; hw->src_set_sf(src->rsc.ctrl_blk, sf); return 0; @@ -67,9 +67,9 @@ static int src_set_sf(struct src *src, unsigned int sf) static int src_set_pm(struct src *src, unsigned int pm) { - struct hw *hw = NULL; + struct hw *hw; - hw = (struct hw *)src->rsc.hw; + hw = src->rsc.hw; hw->src_set_pm(src->rsc.ctrl_blk, pm); return 0; @@ -77,9 +77,9 @@ static int src_set_pm(struct src *src, unsigned int pm) static int src_set_rom(struct src *src, unsigned int rom) { - struct hw *hw = NULL; + struct hw *hw; - hw = (struct hw *)src->rsc.hw; + hw = src->rsc.hw; hw->src_set_rom(src->rsc.ctrl_blk, rom); return 0; @@ -87,9 +87,9 @@ static int src_set_rom(struct src *src, unsigned int rom) static int src_set_vo(struct src *src, unsigned int vo) { - struct hw *hw = NULL; + struct hw *hw; - hw = (struct hw *)src->rsc.hw; + hw = src->rsc.hw; hw->src_set_vo(src->rsc.ctrl_blk, vo); return 0; @@ -97,9 +97,9 @@ static int src_set_vo(struct src *src, unsigned int vo) static int src_set_st(struct src *src, unsigned int st) { - struct hw *hw = NULL; + struct hw *hw; - hw = (struct hw *)src->rsc.hw; + hw = src->rsc.hw; hw->src_set_st(src->rsc.ctrl_blk, st); return 0; @@ -107,9 +107,9 @@ static int src_set_st(struct src *src, unsigned int st) static int src_set_bp(struct src *src, unsigned int bp) { - struct hw *hw = NULL; + struct hw *hw; - hw = (struct hw *)src->rsc.hw; + hw = src->rsc.hw; hw->src_set_bp(src->rsc.ctrl_blk, bp); return 0; @@ -117,9 +117,9 @@ static int src_set_bp(struct src *src, unsigned int bp) static int src_set_cisz(struct src *src, unsigned int cisz) { - struct hw *hw = NULL; + struct hw *hw; - hw = (struct hw *)src->rsc.hw; + hw = src->rsc.hw; hw->src_set_cisz(src->rsc.ctrl_blk, cisz); return 0; @@ -127,9 +127,9 @@ static int src_set_cisz(struct src *src, unsigned int cisz) static int src_set_ca(struct src *src, unsigned int ca) { - struct hw *hw = NULL; + struct hw *hw; - hw = (struct hw *)src->rsc.hw; + hw = src->rsc.hw; hw->src_set_ca(src->rsc.ctrl_blk, ca); return 0; @@ -137,9 +137,9 @@ static int src_set_ca(struct src *src, unsigned int ca) static int src_set_sa(struct src *src, unsigned int sa) { - struct hw *hw = NULL; + struct hw *hw; - hw = (struct hw *)src->rsc.hw; + hw = src->rsc.hw; hw->src_set_sa(src->rsc.ctrl_blk, sa); return 0; @@ -147,9 +147,9 @@ static int src_set_sa(struct src *src, unsigned int sa) static int src_set_la(struct src *src, unsigned int la) { - struct hw *hw = NULL; + struct hw *hw; - hw = (struct hw *)src->rsc.hw; + hw = src->rsc.hw; hw->src_set_la(src->rsc.ctrl_blk, la); return 0; @@ -157,9 +157,9 @@ static int src_set_la(struct src *src, unsigned int la) static int src_set_pitch(struct src *src, unsigned int pitch) { - struct hw *hw = NULL; + struct hw *hw; - hw = (struct hw *)src->rsc.hw; + hw = src->rsc.hw; hw->src_set_pitch(src->rsc.ctrl_blk, pitch); return 0; @@ -167,9 +167,9 @@ static int src_set_pitch(struct src *src, unsigned int pitch) static int src_set_clear_zbufs(struct src *src) { - struct hw *hw = NULL; + struct hw *hw; - hw = (struct hw *)src->rsc.hw; + hw = src->rsc.hw; hw->src_set_clear_zbufs(src->rsc.ctrl_blk, 1); return 0; @@ -177,11 +177,11 @@ static int src_set_clear_zbufs(struct src *src) static int src_commit_write(struct src *src) { - struct hw *hw = NULL; - int i = 0; + struct hw *hw; + int i; unsigned int dirty = 0; - hw = (struct hw *)src->rsc.hw; + hw = src->rsc.hw; src->rsc.ops->master(&src->rsc); if (src->rsc.msr > 1) { /* Save dirty flags for conjugate resource programming */ @@ -207,9 +207,9 @@ static int src_commit_write(struct src *src) static int src_get_ca(struct src *src) { - struct hw *hw = NULL; + struct hw *hw; - hw = (struct hw *)src->rsc.hw; + hw = src->rsc.hw; return hw->src_get_ca(hw, src->rsc.ops->index(&src->rsc), src->rsc.ctrl_blk); } @@ -229,7 +229,7 @@ static struct src *src_next_interleave(struct src *src) static int src_default_config_memrd(struct src *src) { struct hw *hw = src->rsc.hw; - unsigned int rsr = 0, msr = 0; + unsigned int rsr, msr; hw->src_set_state(src->rsc.ctrl_blk, SRC_STATE_OFF); hw->src_set_bm(src->rsc.ctrl_blk, 1); @@ -297,7 +297,7 @@ static int src_default_config_memwr(struct src *src) static int src_default_config_arcrw(struct src *src) { struct hw *hw = src->rsc.hw; - unsigned int rsr = 0, msr = 0; + unsigned int rsr, msr; unsigned int dirty; hw->src_set_state(src->rsc.ctrl_blk, SRC_STATE_OFF); @@ -360,8 +360,8 @@ static int src_rsc_init(struct src *src, u32 idx, const struct src_desc *desc, struct src_mgr *mgr) { - int err = 0; - int i = 0, n = 0; + int err; + int i, n; struct src *p; n = (MEMRD == desc->mode) ? desc->multi : 1; @@ -395,7 +395,7 @@ error1: static int src_rsc_uninit(struct src *src, struct src_mgr *mgr) { - int i = 0, n = 0; + int i, n; struct src *p; n = (MEMRD == src->mode) ? src->multi : 1; @@ -416,8 +416,8 @@ static int get_src_rsc(struct src_mgr *mgr, const struct src_desc *desc, struct src **rsrc) { unsigned int idx = SRC_RESOURCE_NUM; - int err = 0; - struct src *src = NULL; + int err; + struct src *src; unsigned long flags; *rsrc = NULL; @@ -489,7 +489,7 @@ static int put_src_rsc(struct src_mgr *mgr, struct src *src) static int src_enable_s(struct src_mgr *mgr, struct src *src) { struct hw *hw = mgr->mgr.hw; - int i = 0; + int i; src->rsc.ops->master(&src->rsc); for (i = 0; i < src->rsc.msr; i++) { @@ -505,7 +505,7 @@ static int src_enable_s(struct src_mgr *mgr, struct src *src) static int src_enable(struct src_mgr *mgr, struct src *src) { struct hw *hw = mgr->mgr.hw; - int i = 0; + int i; src->rsc.ops->master(&src->rsc); for (i = 0; i < src->rsc.msr; i++) { @@ -521,7 +521,7 @@ static int src_enable(struct src_mgr *mgr, struct src *src) static int src_disable(struct src_mgr *mgr, struct src *src) { struct hw *hw = mgr->mgr.hw; - int i = 0; + int i; src->rsc.ops->master(&src->rsc); for (i = 0; i < src->rsc.msr; i++) { @@ -545,7 +545,7 @@ static int src_mgr_commit_write(struct src_mgr *mgr) int src_mgr_create(void *hw, struct src_mgr **rsrc_mgr) { - int err = 0, i = 0; + int err, i; struct src_mgr *src_mgr; *rsrc_mgr = NULL; @@ -618,8 +618,8 @@ static struct rsc_ops srcimp_basic_rsc_ops = { static int srcimp_map(struct srcimp *srcimp, struct src *src, struct rsc *input) { - struct imapper *entry = NULL; - int i = 0; + struct imapper *entry; + int i; srcimp->rsc.ops->master(&srcimp->rsc); src->rsc.ops->master(&src->rsc); @@ -646,7 +646,7 @@ static int srcimp_map(struct srcimp *srcimp, struct src *src, struct rsc *input) static int srcimp_unmap(struct srcimp *srcimp) { - int i = 0; + int i; /* Program master and conjugate resources */ for (i = 0; i < srcimp->rsc.msr; i++) { @@ -669,7 +669,7 @@ static int srcimp_rsc_init(struct srcimp *srcimp, const struct srcimp_desc *desc, struct srcimp_mgr *mgr) { - int err = 0; + int err; err = rsc_init(&srcimp->rsc, srcimp->idx[0], SRCIMP, desc->msr, mgr->mgr.hw); @@ -715,9 +715,9 @@ static int get_srcimp_rsc(struct srcimp_mgr *mgr, const struct srcimp_desc *desc, struct srcimp **rsrcimp) { - int err = 0, i = 0; - unsigned int idx = 0; - struct srcimp *srcimp = NULL; + int err, i; + unsigned int idx; + struct srcimp *srcimp; unsigned long flags; *rsrcimp = NULL; @@ -765,7 +765,7 @@ error1: static int put_srcimp_rsc(struct srcimp_mgr *mgr, struct srcimp *srcimp) { unsigned long flags; - int i = 0; + int i; spin_lock_irqsave(&mgr->mgr_lock, flags); for (i = 0; i < srcimp->rsc.msr; i++) @@ -795,7 +795,7 @@ static int srcimp_map_op(void *data, struct imapper *entry) static int srcimp_imap_add(struct srcimp_mgr *mgr, struct imapper *entry) { unsigned long flags; - int err = 0; + int err; spin_lock_irqsave(&mgr->imap_lock, flags); if ((0 == entry->addr) && (mgr->init_imap_added)) { @@ -812,7 +812,7 @@ static int srcimp_imap_add(struct srcimp_mgr *mgr, struct imapper *entry) static int srcimp_imap_delete(struct srcimp_mgr *mgr, struct imapper *entry) { unsigned long flags; - int err = 0; + int err; spin_lock_irqsave(&mgr->imap_lock, flags); err = input_mapper_delete(&mgr->imappers, entry, srcimp_map_op, mgr); @@ -828,7 +828,7 @@ static int srcimp_imap_delete(struct srcimp_mgr *mgr, struct imapper *entry) int srcimp_mgr_create(void *hw, struct srcimp_mgr **rsrcimp_mgr) { - int err = 0; + int err; struct srcimp_mgr *srcimp_mgr; struct imapper *entry; diff --git a/sound/pci/ctxfi/ctvmem.c b/sound/pci/ctxfi/ctvmem.c index b7f8e58ae07d..67665a7e43c6 100644 --- a/sound/pci/ctxfi/ctvmem.c +++ b/sound/pci/ctxfi/ctvmem.c @@ -31,8 +31,8 @@ static struct ct_vm_block * get_vm_block(struct ct_vm *vm, unsigned int size) { - struct ct_vm_block *block = NULL, *entry = NULL; - struct list_head *pos = NULL; + struct ct_vm_block *block = NULL, *entry; + struct list_head *pos; size = CT_PAGE_ALIGN(size); if (size > vm->size) { @@ -77,8 +77,8 @@ get_vm_block(struct ct_vm *vm, unsigned int size) static void put_vm_block(struct ct_vm *vm, struct ct_vm_block *block) { - struct ct_vm_block *entry = NULL, *pre_ent = NULL; - struct list_head *pos = NULL, *pre = NULL; + struct ct_vm_block *entry, *pre_ent; + struct list_head *pos, *pre; block->size = CT_PAGE_ALIGN(block->size); @@ -223,8 +223,8 @@ int ct_vm_create(struct ct_vm **rvm) void ct_vm_destroy(struct ct_vm *vm) { int i; - struct list_head *pos = NULL; - struct ct_vm_block *entry = NULL; + struct list_head *pos; + struct ct_vm_block *entry; /* free used and unused list nodes */ while (!list_empty(&vm->used)) { -- cgit v1.2.3 From 9470195a9cd13e6d90221b8b5d897e9232da8d28 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Mon, 8 Jun 2009 18:10:32 +0200 Subject: ALSA: ctxfi - Clean up probe routines Clean up probe routines and model detection routines so that the driver won't call and check the PCI subsystem id at each time. Signed-off-by: Takashi Iwai --- sound/pci/ctxfi/ctatc.c | 132 +++++++++++++++++++------------------------ sound/pci/ctxfi/ctatc.h | 17 ++---- sound/pci/ctxfi/ctdaio.c | 6 +- sound/pci/ctxfi/cthardware.c | 31 +++------- sound/pci/ctxfi/cthardware.h | 20 ++++++- sound/pci/ctxfi/cthw20k1.c | 88 +++++++++++------------------ sound/pci/ctxfi/xfi.c | 15 +++-- 7 files changed, 135 insertions(+), 174 deletions(-) (limited to 'sound/pci/ctxfi/ctdaio.c') diff --git a/sound/pci/ctxfi/ctatc.c b/sound/pci/ctxfi/ctatc.c index 7898a375df0e..002a70e0b13a 100644 --- a/sound/pci/ctxfi/ctatc.c +++ b/sound/pci/ctxfi/ctatc.c @@ -39,29 +39,40 @@ | (0x10 << 16) \ | ((IEC958_AES3_CON_FS_48000) << 24)) -static const struct ct_atc_chip_sub_details atc_sub_details[NUM_CTCARDS] = { - [CTSB0760] = {.subsys = PCI_SUBDEVICE_ID_CREATIVE_SB0760, - .nm_model = "SB076x"}, - [CTHENDRIX] = {.subsys = PCI_SUBDEVICE_ID_CREATIVE_HENDRIX, - .nm_model = "Hendrix"}, - [CTSB08801] = {.subsys = PCI_SUBDEVICE_ID_CREATIVE_SB08801, - .nm_model = "SB0880"}, - [CTSB08802] = {.subsys = PCI_SUBDEVICE_ID_CREATIVE_SB08802, - .nm_model = "SB0880"}, - [CTSB08803] = {.subsys = PCI_SUBDEVICE_ID_CREATIVE_SB08803, - .nm_model = "SB0880"} +static struct snd_pci_quirk __devinitdata subsys_20k1_list[] = { + SND_PCI_QUIRK(PCI_VENDOR_ID_CREATIVE, 0x0022, "SB055x", CTSB055X), + SND_PCI_QUIRK(PCI_VENDOR_ID_CREATIVE, 0x002f, "SB055x", CTSB055X), + SND_PCI_QUIRK(PCI_VENDOR_ID_CREATIVE, 0x0029, "SB073x", CTSB073X), + SND_PCI_QUIRK(PCI_VENDOR_ID_CREATIVE, 0x0031, "SB073x", CTSB073X), + SND_PCI_QUIRK_MASK(PCI_VENDOR_ID_CREATIVE, 0x6000, + PCI_SUBDEVICE_ID_CREATIVE_HENDRIX, "UAA", CTUAA), + SND_PCI_QUIRK_VENDOR(PCI_VENDOR_ID_CREATIVE, + "Unknown", CT20K1_UNKNOWN), + { } /* terminator */ }; -static struct ct_atc_chip_details atc_chip_details[] = { - {.vendor = PCI_VENDOR_ID_CREATIVE, - .device = PCI_DEVICE_ID_CREATIVE_20K1, - .sub_details = NULL, - .nm_card = "X-Fi 20k1"}, - {.vendor = PCI_VENDOR_ID_CREATIVE, - .device = PCI_DEVICE_ID_CREATIVE_20K2, - .sub_details = atc_sub_details, - .nm_card = "X-Fi 20k2"}, - {} /* terminator */ +static struct snd_pci_quirk __devinitdata subsys_20k2_list[] = { + SND_PCI_QUIRK(PCI_VENDOR_ID_CREATIVE, PCI_SUBDEVICE_ID_CREATIVE_SB0760, + "SB0760", CTSB0760), + SND_PCI_QUIRK(PCI_VENDOR_ID_CREATIVE, PCI_SUBDEVICE_ID_CREATIVE_SB08801, + "SB0880", CTSB0880), + SND_PCI_QUIRK(PCI_VENDOR_ID_CREATIVE, PCI_SUBDEVICE_ID_CREATIVE_SB08802, + "SB0880", CTSB0880), + SND_PCI_QUIRK(PCI_VENDOR_ID_CREATIVE, PCI_SUBDEVICE_ID_CREATIVE_SB08803, + "SB0880", CTSB0880), + SND_PCI_QUIRK_MASK(PCI_VENDOR_ID_CREATIVE, 0x6000, + PCI_SUBDEVICE_ID_CREATIVE_HENDRIX, "UAA", CTHENDRIX), + { } /* terminator */ +}; + +static const char *ct_subsys_name[NUM_CTCARDS] = { + [CTSB055X] = "SB055x", + [CTSB073X] = "SB073x", + [CTSB0760] = "SB076x", + [CTUAA] = "UAA", + [CT20K1_UNKNOWN] = "Unknown", + [CTHENDRIX] = "Hendrix", + [CTSB0880] = "SB0880", }; static struct { @@ -1208,62 +1219,39 @@ static int atc_dev_free(struct snd_device *dev) static int __devinit atc_identify_card(struct ct_atc *atc) { - u16 subsys; - u8 revision; - struct pci_dev *pci = atc->pci; - const struct ct_atc_chip_details *d; - enum CTCARDS i; - - subsys = pci->subsystem_device; - revision = pci->revision; - atc->chip_details = NULL; - atc->model = NUM_CTCARDS; - for (d = atc_chip_details; d->vendor; d++) { - if (d->vendor != pci->vendor || d->device != pci->device) - continue; + const struct snd_pci_quirk *p; + const struct snd_pci_quirk *list; - if (NULL == d->sub_details) { - atc->chip_details = d; - break; - } - for (i = 0; i < NUM_CTCARDS; i++) { - if ((d->sub_details[i].subsys == subsys) || - (((subsys & 0x6000) == 0x6000) && - ((d->sub_details[i].subsys & 0x6000) == 0x6000))) { - atc->model = i; - break; - } - } - if (i >= NUM_CTCARDS) - continue; - - atc->chip_details = d; + switch (atc->chip_type) { + case ATC20K1: + atc->chip_name = "20K1"; + list = subsys_20k1_list; + break; + case ATC20K2: + atc->chip_name = "20K2"; + list = subsys_20k2_list; break; - /* not take revision into consideration now */ + default: + return -ENOENT; } - if (!d->vendor) + p = snd_pci_quirk_lookup(atc->pci, list); + if (!p) return -ENOENT; - + atc->model = p->value; + atc->model_name = ct_subsys_name[atc->model]; + snd_printd("ctxfi: chip %s model %s (%04x:%04x) is found\n", + atc->chip_name, atc->model_name, + atc->pci->subsystem_vendor, + atc->pci->subsystem_device); return 0; } int __devinit ct_atc_create_alsa_devs(struct ct_atc *atc) { enum CTALSADEVS i; - struct hw *hw = atc->hw; int err; - switch (hw->get_chip_type(hw)) { - case ATC20K1: - alsa_dev_funcs[MIXER].public_name = "20K1"; - break; - case ATC20K2: - alsa_dev_funcs[MIXER].public_name = "20K2"; - break; - default: - alsa_dev_funcs[MIXER].public_name = "Unknown"; - break; - } + alsa_dev_funcs[MIXER].public_name = atc->chip_name; for (i = 0; i < NUM_CTALSADEVS; i++) { if (NULL == alsa_dev_funcs[i].create) @@ -1287,7 +1275,7 @@ static int __devinit atc_create_hw_devs(struct ct_atc *atc) struct card_conf info = {0}; int i, err; - err = create_hw_obj(atc->pci, &hw); + err = create_hw_obj(atc->pci, atc->chip_type, atc->model, &hw); if (err) { printk(KERN_ERR "Failed to create hw obj!!!\n"); return err; @@ -1328,7 +1316,6 @@ static int __devinit atc_get_resources(struct ct_atc *atc) struct sum_desc sum_dsc = {0}; struct sum_mgr *sum_mgr; int err, i; - unsigned short subsys_id; atc->daios = kzalloc(sizeof(void *)*(DAIONUM), GFP_KERNEL); if (NULL == atc->daios) @@ -1359,13 +1346,10 @@ static int __devinit atc_get_resources(struct ct_atc *atc) } atc->n_daio++; } - subsys_id = atc->pci->subsystem_device; - if ((subsys_id == 0x0029) || (subsys_id == 0x0031)) { - /* SB073x cards */ + if (atc->model == CTSB073X) da_desc.type = SPDIFI1; - } else { + else da_desc.type = SPDIFIO; - } err = daio_mgr->get_daio(daio_mgr, &da_desc, (struct daio **)&atc->daios[i]); if (err) { @@ -1555,7 +1539,8 @@ static struct ct_atc atc_preset __devinitdata = { */ int __devinit ct_atc_create(struct snd_card *card, struct pci_dev *pci, - unsigned int rsr, unsigned int msr, struct ct_atc **ratc) + unsigned int rsr, unsigned int msr, + int chip_type, struct ct_atc **ratc) { struct ct_atc *atc; static struct snd_device_ops ops = { @@ -1576,6 +1561,7 @@ int __devinit ct_atc_create(struct snd_card *card, struct pci_dev *pci, atc->pci = pci; atc->rsr = rsr; atc->msr = msr; + atc->chip_type = chip_type; spin_lock_init(&atc->atc_lock); diff --git a/sound/pci/ctxfi/ctatc.h b/sound/pci/ctxfi/ctatc.h index 04459aa0d4d9..a03347232e84 100644 --- a/sound/pci/ctxfi/ctatc.h +++ b/sound/pci/ctxfi/ctatc.h @@ -37,15 +37,6 @@ enum CTALSADEVS { /* Types of alsa devices */ NUM_CTALSADEVS /* This should always be the last */ }; -enum CTCARDS { - CTSB0760, - CTHENDRIX, - CTSB08801, - CTSB08802, - CTSB08803, - NUM_CTCARDS /* This should always be the last */ -}; - struct ct_atc_chip_sub_details { u16 subsys; const char *nm_model; @@ -89,8 +80,10 @@ struct ct_atc { unsigned int msr; /* master sample rate in rsr */ unsigned int pll_rate; /* current rate of Phase Lock Loop */ - const struct ct_atc_chip_details *chip_details; - enum CTCARDS model; + int chip_type; + int model; + const char *chip_name; + const char *model_name; struct ct_vm *vm; /* device virtual memory manager for this card */ int (*map_audio_buffer)(struct ct_atc *atc, struct ct_atc_pcm *apcm); @@ -147,7 +140,7 @@ struct ct_atc { int __devinit ct_atc_create(struct snd_card *card, struct pci_dev *pci, - unsigned int rsr, unsigned int msr, + unsigned int rsr, unsigned int msr, int chip_type, struct ct_atc **ratc); int __devinit ct_atc_create_alsa_devs(struct ct_atc *atc); diff --git a/sound/pci/ctxfi/ctdaio.c b/sound/pci/ctxfi/ctdaio.c index befead4eeaab..082e35c08c02 100644 --- a/sound/pci/ctxfi/ctdaio.c +++ b/sound/pci/ctxfi/ctdaio.c @@ -116,7 +116,7 @@ static struct rsc_ops daio_in_rsc_ops_20k2 = { static unsigned int daio_device_index(enum DAIOTYP type, struct hw *hw) { - switch (hw->get_chip_type(hw)) { + switch (hw->chip_type) { case ATC20K1: switch (type) { case SPDIFOO: return 0; @@ -343,7 +343,7 @@ static int daio_rsc_init(struct daio *daio, int err; unsigned int idx_l, idx_r; - switch (((struct hw *)hw)->get_chip_type(hw)) { + switch (((struct hw *)hw)->chip_type) { case ATC20K1: idx_l = idx_20k1[desc->type].left; idx_r = idx_20k1[desc->type].right; @@ -367,7 +367,7 @@ static int daio_rsc_init(struct daio *daio, if (desc->type <= DAIO_OUT_MAX) { daio->rscl.ops = daio->rscr.ops = &daio_out_rsc_ops; } else { - switch (((struct hw *)hw)->get_chip_type(hw)) { + switch (((struct hw *)hw)->chip_type) { case ATC20K1: daio->rscl.ops = daio->rscr.ops = &daio_in_rsc_ops_20k1; break; diff --git a/sound/pci/ctxfi/cthardware.c b/sound/pci/ctxfi/cthardware.c index 5ec6813d3911..8e64f4862e85 100644 --- a/sound/pci/ctxfi/cthardware.c +++ b/sound/pci/ctxfi/cthardware.c @@ -20,34 +20,16 @@ #include "cthw20k2.h" #include -static enum CHIPTYP __devinitdata get_chip_type(struct hw *hw) -{ - enum CHIPTYP type; - - switch (hw->pci->device) { - case 0x0005: /* 20k1 device */ - type = ATC20K1; - break; - case 0x000B: /* 20k2 device */ - type = ATC20K2; - break; - default: - type = ATCNONE; - break; - } - - return type; -} - -int __devinit create_hw_obj(struct pci_dev *pci, struct hw **rhw) +int __devinit create_hw_obj(struct pci_dev *pci, enum CHIPTYP chip_type, + enum CTCARDS model, struct hw **rhw) { int err; - switch (pci->device) { - case 0x0005: /* 20k1 device */ + switch (chip_type) { + case ATC20K1: err = create_20k1_hw_obj(rhw); break; - case 0x000B: /* 20k2 device */ + case ATC20K2: err = create_20k2_hw_obj(rhw); break; default: @@ -58,7 +40,8 @@ int __devinit create_hw_obj(struct pci_dev *pci, struct hw **rhw) return err; (*rhw)->pci = pci; - (*rhw)->get_chip_type = get_chip_type; + (*rhw)->chip_type = chip_type; + (*rhw)->model = model; return 0; } diff --git a/sound/pci/ctxfi/cthardware.h b/sound/pci/ctxfi/cthardware.h index 8f11644ddc92..4a8e04f090a4 100644 --- a/sound/pci/ctxfi/cthardware.h +++ b/sound/pci/ctxfi/cthardware.h @@ -27,6 +27,19 @@ enum CHIPTYP { ATCNONE }; +enum CTCARDS { + /* 20k1 models */ + CTSB055X, + CTSB073X, + CTUAA, + CT20K1_UNKNOWN, + /* 20k2 models */ + CTSB0760, + CTHENDRIX, + CTSB0880, + NUM_CTCARDS /* This should always be the last */ +}; + /* Type of input source for ADC */ enum ADCSRC{ ADC_MICIN, @@ -48,7 +61,6 @@ struct hw { int (*card_init)(struct hw *hw, struct card_conf *info); int (*card_stop)(struct hw *hw); int (*pll_init)(struct hw *hw, unsigned int rsr); - enum CHIPTYP (*get_chip_type)(struct hw *hw); int (*is_adc_source_selected)(struct hw *hw, enum ADCSRC source); int (*select_adc_source)(struct hw *hw, enum ADCSRC source); int (*have_digit_io_switch)(struct hw *hw); @@ -156,9 +168,13 @@ struct hw { int irq; unsigned long io_base; unsigned long mem_base; + + enum CHIPTYP chip_type; + enum CTCARDS model; }; -int create_hw_obj(struct pci_dev *pci, struct hw **rhw); +int create_hw_obj(struct pci_dev *pci, enum CHIPTYP chip_type, + enum CTCARDS model, struct hw **rhw); int destroy_hw_obj(struct hw *hw); unsigned int get_field(unsigned int data, unsigned int field); diff --git a/sound/pci/ctxfi/cthw20k1.c b/sound/pci/ctxfi/cthw20k1.c index 38b87b6ee6d4..5d58650beb73 100644 --- a/sound/pci/ctxfi/cthw20k1.c +++ b/sound/pci/ctxfi/cthw20k1.c @@ -1432,11 +1432,9 @@ static int hw_dac_init(struct hw *hw, const struct dac_conf *info) { u32 data; u16 gpioorg; - u16 subsys_id; unsigned int ret; - pci_read_config_word(hw->pci, PCI_SUBSYSTEM_ID, &subsys_id); - if ((subsys_id == 0x0022) || (subsys_id == 0x002F)) { + if (hw->model == CTSB055X) { /* SB055x, unmute outputs */ gpioorg = (u16)hw_read_20kx(hw, GPIO); gpioorg &= 0xffbf; /* set GPIO6 to low */ @@ -1538,19 +1536,14 @@ static int is_adc_input_selected_hendrix(struct hw *hw, enum ADCSRC type) static int hw_is_adc_input_selected(struct hw *hw, enum ADCSRC type) { - u16 subsys_id; - - pci_read_config_word(hw->pci, PCI_SUBSYSTEM_ID, &subsys_id); - if ((subsys_id == 0x0022) || (subsys_id == 0x002F)) { - /* SB055x cards */ + switch (hw->model) { + case CTSB055X: return is_adc_input_selected_SB055x(hw, type); - } else if ((subsys_id == 0x0029) || (subsys_id == 0x0031)) { - /* SB073x cards */ + case CTSB073X: return is_adc_input_selected_hendrix(hw, type); - } else if ((subsys_id & 0xf000) == 0x6000) { - /* Vista compatible cards */ + case CTHENDRIX: return is_adc_input_selected_hendrix(hw, type); - } else { + default: return is_adc_input_selected_SBx(hw, type); } } @@ -1692,20 +1685,17 @@ adc_input_select_hendrix(struct hw *hw, enum ADCSRC type, unsigned char boost) static int hw_adc_input_select(struct hw *hw, enum ADCSRC type) { - u16 subsys_id; - - pci_read_config_word(hw->pci, PCI_SUBSYSTEM_ID, &subsys_id); - if ((subsys_id == 0x0022) || (subsys_id == 0x002F)) { - /* SB055x cards */ - return adc_input_select_SB055x(hw, type, (ADC_MICIN == type)); - } else if ((subsys_id == 0x0029) || (subsys_id == 0x0031)) { - /* SB073x cards */ - return adc_input_select_hendrix(hw, type, (ADC_MICIN == type)); - } else if ((subsys_id & 0xf000) == 0x6000) { - /* Vista compatible cards */ - return adc_input_select_hendrix(hw, type, (ADC_MICIN == type)); - } else { - return adc_input_select_SBx(hw, type, (ADC_MICIN == type)); + int state = type == ADC_MICIN; + + switch (hw->model) { + case CTSB055X: + return adc_input_select_SB055x(hw, type, state); + case CTSB073X: + return adc_input_select_hendrix(hw, type, state); + case CTHENDRIX: + return adc_input_select_hendrix(hw, type, state); + default: + return adc_input_select_SBx(hw, type, state); } } @@ -1781,28 +1771,16 @@ static int adc_init_SBx(struct hw *hw, int input, int mic20db) static int hw_adc_init(struct hw *hw, const struct adc_conf *info) { - int err; - u16 subsys_id; - - pci_read_config_word(hw->pci, PCI_SUBSYSTEM_ID, &subsys_id); - if ((subsys_id == 0x0022) || (subsys_id == 0x002F)) { - /* Sb055x card */ - err = adc_init_SB055x(hw, info->input, info->mic20db); - } else { - err = adc_init_SBx(hw, info->input, info->mic20db); - } - - return err; + if (hw->model == CTSB055X) + return adc_init_SB055x(hw, info->input, info->mic20db); + else + return adc_init_SBx(hw, info->input, info->mic20db); } static int hw_have_digit_io_switch(struct hw *hw) { - u16 subsys_id; - - pci_read_config_word(hw->pci, PCI_SUBSYSTEM_ID, &subsys_id); /* SB073x and Vista compatible cards have no digit IO switch */ - return !((subsys_id == 0x0029) || (subsys_id == 0x0031) - || ((subsys_id & 0xf000) == 0x6000)); + return !(hw->model == CTSB073X || hw->model == CTHENDRIX); } #define CTLBITS(a, b, c, d) (((a) << 24) | ((b) << 16) | ((c) << 8) | (d)) @@ -1918,7 +1896,6 @@ static int hw_card_start(struct hw *hw) { int err; struct pci_dev *pci = hw->pci; - u16 subsys_id; err = pci_enable_device(pci); if (err < 0) @@ -1939,8 +1916,7 @@ static int hw_card_start(struct hw *hw) goto error1; /* Switch to X-Fi mode from UAA mode if neeeded */ - pci_read_config_word(pci, PCI_SUBSYSTEM_ID, &subsys_id); - if ((0x5 == pci->device) && (0x6000 == (subsys_id & 0x6000))) { + if (hw->model == CTHENDRIX) { err = uaa_to_xfi(pci); if (err) goto error2; @@ -2004,7 +1980,6 @@ static int hw_card_init(struct hw *hw, struct card_conf *info) { int err; unsigned int gctl; - u16 subsys_id; u32 data; struct dac_conf dac_info = {0}; struct adc_conf adc_info = {0}; @@ -2044,19 +2019,20 @@ static int hw_card_init(struct hw *hw, struct card_conf *info) hw_write_20kx(hw, SRCIP, 0); mdelay(30); - pci_read_config_word(hw->pci, PCI_SUBSYSTEM_ID, &subsys_id); /* Detect the card ID and configure GPIO accordingly. */ - if ((subsys_id == 0x0022) || (subsys_id == 0x002F)) { - /* SB055x cards */ + switch (hw->model) { + case CTSB055X: hw_write_20kx(hw, GPIOCTL, 0x13fe); - } else if ((subsys_id == 0x0029) || (subsys_id == 0x0031)) { - /* SB073x cards */ + break; + case CTSB073X: hw_write_20kx(hw, GPIOCTL, 0x00e6); - } else if ((subsys_id & 0xf000) == 0x6000) { - /* Vista compatible cards */ + break; + case CTHENDRIX: /* Vista compatible cards */ hw_write_20kx(hw, GPIOCTL, 0x00c2); - } else { + break; + default: hw_write_20kx(hw, GPIOCTL, 0x01e6); + break; } trn_info.vm_pgt_phys = info->vm_pgt_phys; diff --git a/sound/pci/ctxfi/xfi.c b/sound/pci/ctxfi/xfi.c index 279dac6c34dd..2d3dd89af151 100644 --- a/sound/pci/ctxfi/xfi.c +++ b/sound/pci/ctxfi/xfi.c @@ -15,6 +15,7 @@ #include #include #include "ctatc.h" +#include "cthardware.h" MODULE_AUTHOR("Creative Technology Ltd"); MODULE_DESCRIPTION("X-Fi driver version 1.03"); @@ -41,8 +42,12 @@ MODULE_PARM_DESC(enable, "Enable Creative X-Fi driver"); static struct pci_device_id ct_pci_dev_ids[] = { /* only X-Fi is supported, so... */ - { PCI_DEVICE(PCI_VENDOR_ID_CREATIVE, PCI_DEVICE_ID_CREATIVE_20K1) }, - { PCI_DEVICE(PCI_VENDOR_ID_CREATIVE, PCI_DEVICE_ID_CREATIVE_20K2) }, + { PCI_DEVICE(PCI_VENDOR_ID_CREATIVE, PCI_DEVICE_ID_CREATIVE_20K1), + .driver_data = ATC20K1, + }, + { PCI_DEVICE(PCI_VENDOR_ID_CREATIVE, PCI_DEVICE_ID_CREATIVE_20K2), + .driver_data = ATC20K2, + }, { 0, } }; MODULE_DEVICE_TABLE(pci, ct_pci_dev_ids); @@ -79,7 +84,8 @@ ct_card_probe(struct pci_dev *pci, const struct pci_device_id *pci_id) "1 and 2, Value 2 is assumed.\n"); multiple = 2; } - err = ct_atc_create(card, pci, reference_rate, multiple, &atc); + err = ct_atc_create(card, pci, reference_rate, multiple, + pci_id->driver_data, &atc); if (err < 0) goto error; @@ -92,7 +98,8 @@ ct_card_probe(struct pci_dev *pci, const struct pci_device_id *pci_id) strcpy(card->driver, "SB-XFi"); strcpy(card->shortname, "Creative X-Fi"); - strcpy(card->longname, "Creative ALSA Driver X-Fi"); + snprintf(card->longname, sizeof(card->longname), "%s %s %s", + card->shortname, atc->chip_name, atc->model_name); err = snd_card_register(card); if (err < 0) -- cgit v1.2.3