Deleted Added
full compact
62c62
< SND_DECLARE_FILE("$FreeBSD: head/sys/dev/sound/pci/es137x.c 148591 2005-07-31 13:19:38Z netchild $");
---
> SND_DECLARE_FILE("$FreeBSD: head/sys/dev/sound/pci/es137x.c 150832 2005-10-02 15:56:36Z netchild $");
112d111
< int spdif_en;
113a113
> struct pcmchan_caps caps;
116,117c116,117
< u_long ctrl;
< u_long sctrl;
---
> uint32_t ctrl;
> uint32_t sctrl;
122c122,124
< /* -------------------------------------------------------------------- */
---
> #define ES_LOCK(sc) snd_mtxlock((sc)->lock)
> #define ES_UNLOCK(sc) snd_mtxunlock((sc)->lock)
> #define ES_LOCK_ASSERT(sc) snd_mtxassert((sc)->lock)
126,127c128
<
< static u_int es1371_wait_src_ready(struct es_info *);
---
> static uint32_t es1371_wait_src_ready(struct es_info *);
131c132
< static int es1371_init(struct es_info *, device_t);
---
> static int es1371_init(struct es_info *);
135c136
< static u_int32_t es_playfmt[] = {
---
> static u_int32_t es_fmt[] = {
142c143
< static struct pcmchan_caps es_playcaps = {4000, 48000, es_playfmt, 0};
---
> static struct pcmchan_caps es_caps = {4000, 48000, es_fmt, 0};
144,152d144
< static u_int32_t es_recfmt[] = {
< AFMT_U8,
< AFMT_STEREO | AFMT_U8,
< AFMT_S16_LE,
< AFMT_STEREO | AFMT_S16_LE,
< 0
< };
< static struct pcmchan_caps es_reccaps = {4000, 48000, es_recfmt, 0};
<
173c165
< static u_int32_t
---
> static __inline u_int32_t
188c180
< static void
---
> static __inline void
227a220
> struct es_info *es;
237a231,232
> es = mix_getdevinfo(m);
> ES_LOCK(es);
240c235
< es1370_wrcodec(mix_getdevinfo(m), mixtable[dev].right, rr);
---
> es1370_wrcodec(es, mixtable[dev].right, rr);
242c237,239
< es1370_wrcodec(mix_getdevinfo(m), mixtable[dev].left, rl);
---
> es1370_wrcodec(es, mixtable[dev].left, rl);
> ES_UNLOCK(es);
>
248a246
> struct es_info *es;
250a249
> es = mix_getdevinfo(m);
256,261c255,263
< es1370_wrcodec(mix_getdevinfo(m), CODEC_LIMIX1, j & 0x55);
< es1370_wrcodec(mix_getdevinfo(m), CODEC_RIMIX1, j & 0xaa);
< es1370_wrcodec(mix_getdevinfo(m), CODEC_LIMIX2, (j >> 8) & 0x17);
< es1370_wrcodec(mix_getdevinfo(m), CODEC_RIMIX2, (j >> 8) & 0x0f);
< es1370_wrcodec(mix_getdevinfo(m), CODEC_OMIX1, 0x7f);
< es1370_wrcodec(mix_getdevinfo(m), CODEC_OMIX2, 0x3f);
---
> ES_LOCK(es);
> es1370_wrcodec(es, CODEC_LIMIX1, j & 0x55);
> es1370_wrcodec(es, CODEC_RIMIX1, j & 0xaa);
> es1370_wrcodec(es, CODEC_LIMIX2, (j >> 8) & 0x17);
> es1370_wrcodec(es, CODEC_RIMIX2, (j >> 8) & 0x0f);
> es1370_wrcodec(es, CODEC_OMIX1, 0x7f);
> es1370_wrcodec(es, CODEC_OMIX2, 0x3f);
> ES_UNLOCK(es);
>
279a282,283
> ES_LOCK_ASSERT(es);
>
289c293
< printf("pcm: es1370_wrcodec timed out\n");
---
> device_printf(es->dev, "%s: timed out\n", __func__);
302d305
< snd_mtxlock(es->lock);
309c312
< snd_mtxunlock(es->lock);
---
> ch->dir = dir;
312,320c315
< return ch;
< }
<
< static int
< eschan_setdir(kobj_t obj, void *data, int dir)
< {
< struct es_chinfo *ch = data;
< struct es_info *es = ch->parent;
<
---
> ES_LOCK(es);
330,331c325,326
< ch->dir = dir;
< return 0;
---
> ES_UNLOCK(es);
> return ch;
339a335
> ES_LOCK(es);
349a346
> ES_UNLOCK(es);
359a357,367
> /* XXX Fixed rate , do nothing. */
> ES_LOCK(es);
> if (es->caps.minspeed == es->caps.maxspeed) {
> speed = es->caps.maxspeed;
> ES_UNLOCK(es);
> return speed;
> }
> if (speed < es->caps.minspeed)
> speed = es->caps.minspeed;
> if (speed > es->caps.maxspeed)
> speed = es->caps.maxspeed;
362a371
> ES_UNLOCK(es);
373a383
> ES_LOCK(es);
377a388
> ES_UNLOCK(es);
386a398
> struct es_info *es;
387a400,401
> uint32_t oblksz, obufsz;
> int error;
388a403,404
> oblksz = ch->blksz;
> obufsz = ch->bufsz;
391c407,414
< sndbuf_resize(ch->buffer, 2, ch->blksz);
---
> error = sndbuf_resize(ch->buffer, 2, ch->blksz);
> if (error != 0) {
> ch->blksz = oblksz;
> ch->bufsz = obufsz;
> es = ch->parent;
> device_printf(es->dev, "unable to set block size, blksz = %d, "
> "error = %d", blocksize, error);
> }
406a430
> ES_LOCK(es);
430a455
> ES_UNLOCK(es);
444a470
> ES_LOCK(es);
446a473
> ES_UNLOCK(es);
455c482,484
< return (ch->dir == PCMDIR_PLAY)? &es_playcaps : &es_reccaps;
---
> struct es_info *es = ch->parent;
>
> return &es->caps;
460d488
< KOBJMETHOD(channel_setdir, eschan_setdir),
473d500
< KOBJMETHOD(channel_setdir, eschan_setdir),
490c517
< unsigned intsrc, sctrl;
---
> uint32_t intsrc, sctrl;
492c519
< snd_mtxlock(es->lock);
---
> ES_LOCK(es);
495c522
< snd_mtxunlock(es->lock);
---
> ES_UNLOCK(es);
506c533
< snd_mtxunlock(es->lock);
---
> ES_UNLOCK(es);
517a545,563
> int r;
>
> /* XXX ES1370 default to fixed rate operation */
> if (resource_int_value(device_get_name(es->dev),
> device_get_unit(es->dev), "fixed_rate", &r) == 0) {
> if (r != 0) {
> if (r < es_caps.minspeed)
> r = es_caps.minspeed;
> if (r > es_caps.maxspeed)
> r = es_caps.maxspeed;
> }
> } else
> r = es_caps.maxspeed;
> ES_LOCK(es);
> es->caps = es_caps;
> if (r != 0) {
> es->caps.minspeed = r;
> es->caps.maxspeed = r;
> }
519c565
< (DAC2_SRTODIV(DSP_DEFAULT_SPEED) << CTRL_SH_PCLKDIV);
---
> (DAC2_SRTODIV(es->caps.maxspeed) << CTRL_SH_PCLKDIV);
530a577
> ES_UNLOCK(es);
537c584
< es1371_init(struct es_info *es, device_t dev)
---
> es1371_init(struct es_info *es)
539c586
< u_long cssr;
---
> uint32_t cssr, devid, revid;
541,542d587
< int devid = pci_get_devid(dev);
< int revid = pci_get_revid(dev);
543a589
> ES_LOCK(es);
546a593
> es->caps = es_caps;
547a595,596
> devid = pci_get_devid(es->dev);
> revid = pci_get_revid(es->dev);
597a647
> ES_UNLOCK(es);
607c657
< unsigned t, x, orig;
---
> uint32_t t, x, orig;
642c692
< unsigned t, x = 0, orig;
---
> uint32_t t, x, orig;
693c743
< unsigned int r;
---
> uint32_t r;
705c755
< u_int r;
---
> uint32_t r;
717a768,769
> ES_LOCK_ASSERT(es);
>
750a803,804
> ES_LOCK_ASSERT(es);
>
770c824
< static u_int
---
> static uint32_t
773c827
< u_int t, r;
---
> uint32_t t, r;
780c834,835
< printf("es1371: wait src ready timeout 0x%x [0x%x]\n", ES1371_REG_SMPRATE, r);
---
> device_printf(es->dev, "%s: timed out 0x%x [0x%x]\n", __func__,
> ES1371_REG_SMPRATE, r);
873c928
< sysctl_es1371x_spdif_enable(SYSCTL_HANDLER_ARGS)
---
> sysctl_es137x_spdif_enable(SYSCTL_HANDLER_ARGS)
877c932,933
< int err, new_en, r;
---
> uint32_t r;
> int err, new_en;
881,883c937,940
< snd_mtxlock(es->lock);
< new_en = es->spdif_en;
< snd_mtxunlock(es->lock);
---
> ES_LOCK(es);
> r = es_rd(es, ES1370_REG_STATUS, 4);
> ES_UNLOCK(es);
> new_en = (r & ENABLE_SPDIF) ? 1 : 0;
887c944
< return err;
---
> return (err);
889c946
< return EINVAL;
---
> return (EINVAL);
891,893c948
< snd_mtxlock(es->lock);
< es->spdif_en = new_en;
< r = es_rd(es, ES1370_REG_STATUS, 4);
---
> ES_LOCK(es);
905,906c960,962
< snd_mtxunlock(es->lock);
< return 0;
---
> ES_UNLOCK(es);
>
> return (0);
910c966
< sysctl_es1371x_latency_timer(SYSCTL_HANDLER_ARGS)
---
> sysctl_es137x_latency_timer(SYSCTL_HANDLER_ARGS)
914c970,971
< int err, val;
---
> uint32_t val;
> int err;
918c975
< snd_mtxlock(es->lock);
---
> ES_LOCK(es);
920c977
< snd_mtxunlock(es->lock);
---
> ES_UNLOCK(es);
924,926c981,983
< return err;
< if (val < 0 || val > 255)
< return EINVAL;
---
> return (err);
> if (val > 255)
> return (EINVAL);
928c985
< snd_mtxlock(es->lock);
---
> ES_LOCK(es);
930,931c987,989
< snd_mtxunlock(es->lock);
< return 0;
---
> ES_UNLOCK(es);
>
> return (0);
932a991,1029
>
> static int
> sysctl_es137x_fixed_rate(SYSCTL_HANDLER_ARGS)
> {
> struct es_info *es;
> device_t dev;
> uint32_t val;
> int err;
>
> dev = oidp->oid_arg1;
> es = pcm_getdevinfo(dev);
> ES_LOCK(es);
> if (es->caps.minspeed == es->caps.maxspeed)
> val = es->caps.maxspeed;
> else
> val = 0;
> ES_UNLOCK(es);
> err = sysctl_handle_int(oidp, &val, sizeof(val), req);
>
> if (err || req->newptr == NULL)
> return (err);
> if (val != 0 && (val < es_caps.minspeed || val > es_caps.maxspeed))
> return (EINVAL);
>
> ES_LOCK(es);
> if (val) {
> es->caps.minspeed = val;
> es->caps.maxspeed = val;
> es->ctrl &= ~CTRL_PCLKDIV;
> es->ctrl |= DAC2_SRTODIV(val) << CTRL_SH_PCLKDIV;
> es_wr(es, ES1370_REG_CONTROL, es->ctrl, 4);
> } else {
> es->caps.minspeed = es_caps.minspeed;
> es->caps.maxspeed = es_caps.maxspeed;
> }
> ES_UNLOCK(es);
>
> return (0);
> }
950,951d1046
< r = es_rd(es, ES1370_REG_STATUS, 4);
< es->spdif_en = (r & ENABLE_SPDIF) ? 1 : 0;
956c1051
< sysctl_es1371x_spdif_enable, "I",
---
> sysctl_es137x_spdif_enable, "I",
957a1053,1059
> } else if (devid == ES1370_PCI_ID) {
> SYSCTL_ADD_PROC(snd_sysctl_tree(dev),
> SYSCTL_CHILDREN(snd_sysctl_tree_top(dev)),
> OID_AUTO, "fixed_rate",
> CTLTYPE_INT | CTLFLAG_RW, dev, sizeof(dev),
> sysctl_es137x_fixed_rate, "I",
> "Enable fixed rate playback/recording");
967c1069
< sysctl_es1371x_latency_timer, "I",
---
> sysctl_es137x_latency_timer, "I",
976c1078
< struct es_info *es = 0;
---
> struct es_info *es = NULL;
979c1081
< struct ac97_info *codec = 0;
---
> struct ac97_info *codec = NULL;
981c1083
< int devid, revid;
---
> uint32_t devid;
989a1092,1093
>
> pci_enable_busmaster(dev);
991c1095
< data |= (PCIM_CMD_PORTEN|PCIM_CMD_MEMEN|PCIM_CMD_BUSMASTEREN);
---
> data |= (PCIM_CMD_PORTEN|PCIM_CMD_MEMEN);
999,1001c1103
< if (es->reg) {
< es->st = rman_get_bustag(es->reg);
< es->sh = rman_get_bushandle(es->reg);
---
> if (es->reg)
1003d1104
< }
1010,1012c1111
< if (es->reg) {
< es->st = rman_get_bustag(es->reg);
< es->sh = rman_get_bushandle(es->reg);
---
> if (es->reg)
1014d1112
< }
1020a1119,1120
> es->st = rman_get_bustag(es->reg);
> es->sh = rman_get_bushandle(es->reg);
1024,1031c1124,1129
< revid = pci_get_revid(dev);
<
< if (devid == ES1371_PCI_ID || devid == ES1371_PCI_ID2 ||
< devid == CT5880_PCI_ID || devid == CT4730_PCI_ID) {
< if(-1 == es1371_init(es, dev)) {
< device_printf(dev, "unable to initialize the card\n");
< goto bad;
< }
---
> switch (devid) {
> case ES1371_PCI_ID:
> case ES1371_PCI_ID2:
> case CT5880_PCI_ID:
> case CT4730_PCI_ID:
> es1371_init(es);
1033c1131,1132
< if (codec == NULL) goto bad;
---
> if (codec == NULL)
> goto bad;
1037c1136,1137
< if (mixer_init(dev, ac97_getmixerclass(), codec)) goto bad;
---
> if (mixer_init(dev, ac97_getmixerclass(), codec))
> goto bad;
1039,1041c1139,1142
< } else if (devid == ES1370_PCI_ID) {
< if (-1 == es1370_init(es)) {
< device_printf(dev, "unable to initialize the card\n");
---
> break;
> case ES1370_PCI_ID:
> es1370_init(es);
> if (mixer_init(dev, &es1370_mixer_class, es))
1043,1044d1143
< }
< if (mixer_init(dev, &es1370_mixer_class, es)) goto bad;
1046c1145,1149
< } else goto bad;
---
> break;
> default:
> goto bad;
> /* NOTREACHED */
> }
1071c1174,1175
< if (pcm_register(dev, es, 1, 1)) goto bad;
---
> if (pcm_register(dev, es, 1, 1))
> goto bad;
1100d1203
< bus_dma_tag_destroy(es->parent_dmat);
1103a1207
> bus_dma_tag_destroy(es->parent_dmat);