FreeBSD kernel sound device code
tumbler.c File Reference
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/module.h>
#include <sys/bus.h>
#include <sys/malloc.h>
#include <sys/lock.h>
#include <sys/mutex.h>
#include <machine/dbdma.h>
#include <machine/intr_machdep.h>
#include <machine/resource.h>
#include <machine/bus.h>
#include <machine/pio.h>
#include <sys/rman.h>
#include <dev/iicbus/iicbus.h>
#include <dev/iicbus/iiconf.h>
#include <dev/ofw/ofw_bus.h>
#include <dev/sound/pcm/sound.h>
#include "mixer_if.h"
Include dependency graph for tumbler.c:

Go to the source code of this file.

Data Structures

struct  tumbler_softc
 
struct  tumbler_reg
 

Macros

#define TUMBLER_IICADDR   0x68 /* Tumbler I2C slave address */
 
#define TUMBLER_MCR   0x01 /* Main control register (1byte) */
 
#define TUMBLER_DRC   0x02 /* Dynamic Range Compression (2bytes) */
 
#define TUMBLER_VOLUME   0x04 /* Volume (6bytes) */
 
#define TUMBLER_TREBLE   0x05 /* Treble control (1byte) */
 
#define TUMBLER_BASS   0x06 /* Bass control (1byte) */
 
#define TUMBLER_MIXER1   0x07 /* Mixer1 (3bytes) */
 
#define TUMBLER_MIXER2   0x08 /* Mixer2 (3bytes) */
 
#define TUMBLER_LB0   0x0a /* Left biquad 0 (15bytes) */
 
#define TUMBLER_LB1   0x0b /* Left biquad 1 (15bytes) */
 
#define TUMBLER_LB2   0x0c /* Left biquad 2 (15bytes) */
 
#define TUMBLER_LB3   0x0d /* Left biquad 3 (15bytes) */
 
#define TUMBLER_LB4   0x0e /* Left biquad 4 (15bytes) */
 
#define TUMBLER_LB5   0x0f /* Left biquad 5 (15bytes) */
 
#define TUMBLER_RB0   0x13 /* Right biquad 0 (15bytes) */
 
#define TUMBLER_RB1   0x14 /* Right biquad 1 (15bytes) */
 
#define TUMBLER_RB2   0x15 /* Right biquad 2 (15bytes) */
 
#define TUMBLER_RB3   0x16 /* Right biquad 3 (15bytes) */
 
#define TUMBLER_RB4   0x17 /* Right biquad 4 (15bytes) */
 
#define TUMBLER_RB5   0x18 /* Right biquad 5 (15bytes) */
 
#define TUMBLER_MCR_FL   0x80 /* Fast load */
 
#define TUMBLER_MCR_SC   0x40 /* SCLK frequency */
 
#define TUMBLER_MCR_SC_32   0x00 /* 32fs */
 
#define TUMBLER_MCR_SC_64   0x40 /* 64fs */
 
#define TUMBLER_MCR_SM   0x30 /* Output serial port mode */
 
#define TUMBLER_MCR_SM_L   0x00 /* Left justified */
 
#define TUMBLER_MCR_SM_R   0x10 /* Right justified */
 
#define TUMBLER_MCR_SM_I2S   0x20 /* I2S */
 
#define TUMBLER_MCR_ISM   0x0C /* Input serial mode */
 
#define TUMBLER_MCR_ISM_L   0x00
 
#define TUMBLER_MCR_ISM_R   0x04
 
#define TUMBLER_MCR_ISM_I2S   0x08
 
#define TUMBLER_MCR_W   0x03 /* Serial port word length */
 
#define TUMBLER_MCR_W_16   0x00 /* 16 bit */
 
#define TUMBLER_MCR_W_18   0x01 /* 18 bit */
 
#define TUMBLER_MCR_W_20   0x02 /* 20 bit */
 
#define TUMBLER_DRC_COMP_31   0xc0 /* 3:1 compression */
 
#define TUMBLER_DRC_ENABLE   0x01 /* enable DRC */
 
#define TUMBLER_DRC_DEFL_TH   0xa0 /* default compression threshold */
 

Functions

static int tumbler_probe (device_t)
 
static int tumbler_attach (device_t)
 
static int tumbler_init (struct snd_mixer *m)
 
static int tumbler_uninit (struct snd_mixer *m)
 
static int tumbler_reinit (struct snd_mixer *m)
 
static int tumbler_set (struct snd_mixer *m, unsigned dev, unsigned left, unsigned right)
 
static u_int32_t tumbler_setrecsrc (struct snd_mixer *m, u_int32_t src)
 
 DRIVER_MODULE (tumbler, iicbus, tumbler_driver, tumbler_devclass, 0, 0)
 
 MODULE_VERSION (tumbler, 1)
 
 MODULE_DEPEND (tumbler, iicbus, 1, 1, 1)
 
 MIXER_DECLARE (tumbler_mixer)
 
static int tumbler_write (struct tumbler_softc *sc, uint8_t reg, const void *data)
 

Variables

kobj_class_t i2s_mixer_class
 
device_t i2s_mixer
 
static device_method_t tumbler_methods []
 
static driver_t tumbler_driver
 
static devclass_t tumbler_devclass
 
static kobj_method_t tumbler_mixer_methods []
 
const struct tumbler_reg tumbler_initdata
 
const char tumbler_regsize []
 
static u_int tumbler_volume_table [100]
 

Macro Definition Documentation

◆ TUMBLER_BASS

#define TUMBLER_BASS   0x06 /* Bass control (1byte) */

Definition at line 143 of file tumbler.c.

◆ TUMBLER_DRC

#define TUMBLER_DRC   0x02 /* Dynamic Range Compression (2bytes) */

Definition at line 140 of file tumbler.c.

◆ TUMBLER_DRC_COMP_31

#define TUMBLER_DRC_COMP_31   0xc0 /* 3:1 compression */

Definition at line 174 of file tumbler.c.

◆ TUMBLER_DRC_DEFL_TH

#define TUMBLER_DRC_DEFL_TH   0xa0 /* default compression threshold */

Definition at line 176 of file tumbler.c.

◆ TUMBLER_DRC_ENABLE

#define TUMBLER_DRC_ENABLE   0x01 /* enable DRC */

Definition at line 175 of file tumbler.c.

◆ TUMBLER_IICADDR

#define TUMBLER_IICADDR   0x68 /* Tumbler I2C slave address */

Definition at line 136 of file tumbler.c.

◆ TUMBLER_LB0

#define TUMBLER_LB0   0x0a /* Left biquad 0 (15bytes) */

Definition at line 146 of file tumbler.c.

◆ TUMBLER_LB1

#define TUMBLER_LB1   0x0b /* Left biquad 1 (15bytes) */

Definition at line 147 of file tumbler.c.

◆ TUMBLER_LB2

#define TUMBLER_LB2   0x0c /* Left biquad 2 (15bytes) */

Definition at line 148 of file tumbler.c.

◆ TUMBLER_LB3

#define TUMBLER_LB3   0x0d /* Left biquad 3 (15bytes) */

Definition at line 149 of file tumbler.c.

◆ TUMBLER_LB4

#define TUMBLER_LB4   0x0e /* Left biquad 4 (15bytes) */

Definition at line 150 of file tumbler.c.

◆ TUMBLER_LB5

#define TUMBLER_LB5   0x0f /* Left biquad 5 (15bytes) */

Definition at line 151 of file tumbler.c.

◆ TUMBLER_MCR

#define TUMBLER_MCR   0x01 /* Main control register (1byte) */

Definition at line 139 of file tumbler.c.

◆ TUMBLER_MCR_FL

#define TUMBLER_MCR_FL   0x80 /* Fast load */

Definition at line 158 of file tumbler.c.

◆ TUMBLER_MCR_ISM

#define TUMBLER_MCR_ISM   0x0C /* Input serial mode */

Definition at line 166 of file tumbler.c.

◆ TUMBLER_MCR_ISM_I2S

#define TUMBLER_MCR_ISM_I2S   0x08

Definition at line 169 of file tumbler.c.

◆ TUMBLER_MCR_ISM_L

#define TUMBLER_MCR_ISM_L   0x00

Definition at line 167 of file tumbler.c.

◆ TUMBLER_MCR_ISM_R

#define TUMBLER_MCR_ISM_R   0x04

Definition at line 168 of file tumbler.c.

◆ TUMBLER_MCR_SC

#define TUMBLER_MCR_SC   0x40 /* SCLK frequency */

Definition at line 159 of file tumbler.c.

◆ TUMBLER_MCR_SC_32

#define TUMBLER_MCR_SC_32   0x00 /* 32fs */

Definition at line 160 of file tumbler.c.

◆ TUMBLER_MCR_SC_64

#define TUMBLER_MCR_SC_64   0x40 /* 64fs */

Definition at line 161 of file tumbler.c.

◆ TUMBLER_MCR_SM

#define TUMBLER_MCR_SM   0x30 /* Output serial port mode */

Definition at line 162 of file tumbler.c.

◆ TUMBLER_MCR_SM_I2S

#define TUMBLER_MCR_SM_I2S   0x20 /* I2S */

Definition at line 165 of file tumbler.c.

◆ TUMBLER_MCR_SM_L

#define TUMBLER_MCR_SM_L   0x00 /* Left justified */

Definition at line 163 of file tumbler.c.

◆ TUMBLER_MCR_SM_R

#define TUMBLER_MCR_SM_R   0x10 /* Right justified */

Definition at line 164 of file tumbler.c.

◆ TUMBLER_MCR_W

#define TUMBLER_MCR_W   0x03 /* Serial port word length */

Definition at line 170 of file tumbler.c.

◆ TUMBLER_MCR_W_16

#define TUMBLER_MCR_W_16   0x00 /* 16 bit */

Definition at line 171 of file tumbler.c.

◆ TUMBLER_MCR_W_18

#define TUMBLER_MCR_W_18   0x01 /* 18 bit */

Definition at line 172 of file tumbler.c.

◆ TUMBLER_MCR_W_20

#define TUMBLER_MCR_W_20   0x02 /* 20 bit */

Definition at line 173 of file tumbler.c.

◆ TUMBLER_MIXER1

#define TUMBLER_MIXER1   0x07 /* Mixer1 (3bytes) */

Definition at line 144 of file tumbler.c.

◆ TUMBLER_MIXER2

#define TUMBLER_MIXER2   0x08 /* Mixer2 (3bytes) */

Definition at line 145 of file tumbler.c.

◆ TUMBLER_RB0

#define TUMBLER_RB0   0x13 /* Right biquad 0 (15bytes) */

Definition at line 152 of file tumbler.c.

◆ TUMBLER_RB1

#define TUMBLER_RB1   0x14 /* Right biquad 1 (15bytes) */

Definition at line 153 of file tumbler.c.

◆ TUMBLER_RB2

#define TUMBLER_RB2   0x15 /* Right biquad 2 (15bytes) */

Definition at line 154 of file tumbler.c.

◆ TUMBLER_RB3

#define TUMBLER_RB3   0x16 /* Right biquad 3 (15bytes) */

Definition at line 155 of file tumbler.c.

◆ TUMBLER_RB4

#define TUMBLER_RB4   0x17 /* Right biquad 4 (15bytes) */

Definition at line 156 of file tumbler.c.

◆ TUMBLER_RB5

#define TUMBLER_RB5   0x18 /* Right biquad 5 (15bytes) */

Definition at line 157 of file tumbler.c.

◆ TUMBLER_TREBLE

#define TUMBLER_TREBLE   0x05 /* Treble control (1byte) */

Definition at line 142 of file tumbler.c.

◆ TUMBLER_VOLUME

#define TUMBLER_VOLUME   0x04 /* Volume (6bytes) */

Definition at line 141 of file tumbler.c.

Function Documentation

◆ DRIVER_MODULE()

DRIVER_MODULE ( tumbler  ,
iicbus  ,
tumbler_driver  ,
tumbler_devclass  ,
,
 
)

◆ MIXER_DECLARE()

MIXER_DECLARE ( tumbler_mixer  )

◆ MODULE_DEPEND()

MODULE_DEPEND ( tumbler  ,
iicbus  ,
,
,
 
)

◆ MODULE_VERSION()

MODULE_VERSION ( tumbler  ,
 
)

◆ tumbler_attach()

static int tumbler_attach ( device_t  dev)
static

Definition at line 324 of file tumbler.c.

References dev, i2s_mixer, i2s_mixer_class, tumbler_softc::sc_addr, and tumbler_softc::sc_dev.

◆ tumbler_init()

◆ tumbler_probe()

static int tumbler_probe ( device_t  dev)
static

Definition at line 306 of file tumbler.c.

References dev, name, and TUMBLER_IICADDR.

◆ tumbler_reinit()

static int tumbler_reinit ( struct snd_mixer m)
static

Definition at line 380 of file tumbler.c.

◆ tumbler_set()

static int tumbler_set ( struct snd_mixer m,
unsigned  dev,
unsigned  left,
unsigned  right 
)
static

Definition at line 386 of file tumbler.c.

References dev, left, m, mix_getdevinfo(), mixer_get_lock(), r, reg, right, TUMBLER_VOLUME, tumbler_volume_table, and tumbler_write().

Here is the call graph for this function:

◆ tumbler_setrecsrc()

static u_int32_t tumbler_setrecsrc ( struct snd_mixer m,
u_int32_t  src 
)
static

Definition at line 435 of file tumbler.c.

◆ tumbler_uninit()

static int tumbler_uninit ( struct snd_mixer m)
static

Definition at line 374 of file tumbler.c.

◆ tumbler_write()

static int tumbler_write ( struct tumbler_softc sc,
uint8_t  reg,
const void *  data 
)
static

Definition at line 285 of file tumbler.c.

References buf, data, reg, tumbler_softc::sc_addr, tumbler_softc::sc_dev, size, and tumbler_regsize.

Referenced by tumbler_init(), and tumbler_set().

Here is the caller graph for this function:

Variable Documentation

◆ i2s_mixer

device_t i2s_mixer
extern

Definition at line 108 of file i2s.c.

Referenced by i2s_postattach(), and tumbler_attach().

◆ i2s_mixer_class

kobj_class_t i2s_mixer_class
extern

Definition at line 107 of file i2s.c.

Referenced by i2s_postattach(), and tumbler_attach().

◆ tumbler_devclass

devclass_t tumbler_devclass
static

Definition at line 119 of file tumbler.c.

◆ tumbler_driver

driver_t tumbler_driver
static
Initial value:
= {
"tumbler",
sizeof(struct tumbler_softc)
}
static device_method_t tumbler_methods[]
Definition: tumbler.c:107

Definition at line 114 of file tumbler.c.

◆ tumbler_initdata

const struct tumbler_reg tumbler_initdata
Initial value:
= {
{ 0, 0, 0, 0, 0, 0 },
{ 0x72 },
{ 0x3e },
{ 0x10, 0x00, 0x00 },
{ 0x00, 0x00, 0x00 },
{ 0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
}
#define TUMBLER_MCR_W_16
Definition: tumbler.c:171
#define TUMBLER_DRC_COMP_31
Definition: tumbler.c:174
#define TUMBLER_MCR_ISM_I2S
Definition: tumbler.c:169
#define TUMBLER_MCR_SC_64
Definition: tumbler.c:161
#define TUMBLER_MCR_SM_I2S
Definition: tumbler.c:165
#define TUMBLER_DRC_DEFL_TH
Definition: tumbler.c:176

Definition at line 204 of file tumbler.c.

Referenced by tumbler_init().

◆ tumbler_methods

device_method_t tumbler_methods[]
static
Initial value:
= {
DEVMETHOD(device_probe, tumbler_probe),
DEVMETHOD(device_attach, tumbler_attach),
{ 0, 0 }
}
static int tumbler_probe(device_t)
Definition: tumbler.c:306
static int tumbler_attach(device_t)
Definition: tumbler.c:324

Definition at line 107 of file tumbler.c.

◆ tumbler_mixer_methods

kobj_method_t tumbler_mixer_methods[]
static
Initial value:
= {
KOBJMETHOD(mixer_init, tumbler_init),
KOBJMETHOD(mixer_set, tumbler_set),
}
#define KOBJMETHOD_END
Definition: midi.c:76
static int mixer_setrecsrc(struct snd_mixer *mixer, u_int32_t src)
Definition: mixer.c:373
int mixer_init(device_t dev, kobj_class_t cls, void *devinfo)
Definition: mixer.c:725
static int mixer_set(struct snd_mixer *m, u_int dev, u_int32_t muted, u_int lev)
Definition: mixer.c:247
int mixer_uninit(device_t dev)
Definition: mixer.c:805
int mixer_reinit(device_t dev)
Definition: mixer.c:860
static int tumbler_reinit(struct snd_mixer *m)
Definition: tumbler.c:380
static int tumbler_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right)
Definition: tumbler.c:386
static int tumbler_uninit(struct snd_mixer *m)
Definition: tumbler.c:374
static int tumbler_init(struct snd_mixer *m)
Definition: tumbler.c:339
static u_int32_t tumbler_setrecsrc(struct snd_mixer *m, u_int32_t src)
Definition: tumbler.c:435

Definition at line 125 of file tumbler.c.

◆ tumbler_regsize

const char tumbler_regsize[]
Initial value:
= {
0,
0,
0,
0,
0,
0,
}
u_char MIXER1[3]
Definition: tumbler.c:188
u_char TREBLE[1]
Definition: tumbler.c:186
u_char RB0[15]
Definition: tumbler.c:196
u_char RB4[15]
Definition: tumbler.c:200
u_char LB4[15]
Definition: tumbler.c:194
u_char MIXER2[3]
Definition: tumbler.c:189
u_char BASS[1]
Definition: tumbler.c:187
u_char MCR[1]
Definition: tumbler.c:183
u_char LB5[15]
Definition: tumbler.c:195
u_char DRC[2]
Definition: tumbler.c:184
u_char RB3[15]
Definition: tumbler.c:199
u_char RB1[15]
Definition: tumbler.c:197
u_char RB5[15]
Definition: tumbler.c:201
u_char LB1[15]
Definition: tumbler.c:191
u_char LB0[15]
Definition: tumbler.c:190
u_char LB3[15]
Definition: tumbler.c:193
u_char LB2[15]
Definition: tumbler.c:192
u_char RB2[15]
Definition: tumbler.c:198
u_char VOLUME[6]
Definition: tumbler.c:185
const struct tumbler_reg tumbler_initdata
Definition: tumbler.c:204

Definition at line 227 of file tumbler.c.

Referenced by tumbler_write().

◆ tumbler_volume_table

u_int tumbler_volume_table[100]
static
Initial value:
= {
0x00000148, 0x0000015C, 0x00000171, 0x00000186,
0x0000019E, 0x000001B6, 0x000001D0, 0x000001EB,
0x00000209, 0x00000227, 0x00000248, 0x0000026B,
0x0000028F, 0x000002B6, 0x000002DF, 0x0000030B,
0x00000339, 0x0000036A, 0x0000039E, 0x000003D5,
0x0000040F, 0x0000044C, 0x0000048D, 0x000004D2,
0x0000051C, 0x00000569, 0x000005BB, 0x00000612,
0x0000066E, 0x000006D0, 0x00000737, 0x000007A5,
0x00000818, 0x00000893, 0x00000915, 0x0000099F,
0x00000A31, 0x00000ACC, 0x00000B6F, 0x00000C1D,
0x00000CD5, 0x00000D97, 0x00000E65, 0x00000F40,
0x00001027, 0x0000111C, 0x00001220, 0x00001333,
0x00001456, 0x0000158A, 0x000016D1, 0x0000182B,
0x0000199A, 0x00001B1E, 0x00001CB9, 0x00001E6D,
0x0000203A, 0x00002223, 0x00002429, 0x0000264E,
0x00002893, 0x00002AFA, 0x00002D86, 0x00003039,
0x00003314, 0x0000361B, 0x00003950, 0x00003CB5,
0x0000404E, 0x0000441D, 0x00004827, 0x00004C6D,
0x000050F4, 0x000055C0, 0x00005AD5, 0x00006037,
0x000065EA, 0x00006BF4, 0x0000725A, 0x00007920,
0x0000804E, 0x000087EF, 0x00008FF6, 0x0000987D,
0x0000A186, 0x0000AB19, 0x0000B53C, 0x0000BFF9,
0x0000CB59, 0x0000D766, 0x0000E429, 0x0000F1AE,
0x00010000, 0x00010F2B, 0x00011F3D, 0x00013042,
0x00014249, 0x00015562, 0x0001699C, 0x00017F09
}

Definition at line 256 of file tumbler.c.

Referenced by tumbler_set().