File: uda1380.h

package info (click to toggle)
alsa-driver 1.0.13-5etch1
  • links: PTS
  • area: main
  • in suites: etch
  • size: 20,108 kB
  • ctags: 50,477
  • sloc: ansic: 319,881; sh: 32,930; makefile: 2,015; python: 1,527; perl: 1,316; xml: 896; awk: 66
file content (84 lines) | stat: -rw-r--r-- 2,260 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*
 * Audio support for codec Philips UDA1380
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 * Copyright (c) 2005 Giorgio Padrin <giorgio@mandarinlogiq.org>
 */

#ifndef __SOUND_UDA1380_H
#define __SOUND_UDA1380_H

#include <linux/i2c.h>

enum snd_uda1380_capture_source {
	SND_UDA1380_CAP_SOURCE_LINE_IN,
	SND_UDA1380_CAP_SOURCE_MIC
};

struct snd_uda1380 {
	struct semaphore sem;

	u16 regs[0x29];	/* registers cache */

	unsigned int
		powered_on:1,
		playback_on:1,
		playback_switch_ureq:1,
		playback_clock_on:1,
		playback_stream_opened:1,
		capture_on:1,
		capture_switch_ureq:1,
		capture_clock_on:1,
		capture_stream_opened:1;

	/* -- configuration (to fill before activation) -- */
	unsigned int
		line_in_connected:1,
		mic_connected:1,
		hp_connected:1,
		hp_or_line_out;
	enum snd_uda1380_capture_source	capture_source;

	void (*power_on_chip)(int on);
	void (*reset_pin)(int on);
	void (*line_out_on)(int on);
	void (*line_in_on)(int on);
	void (*mic_on)(int on);

	struct i2c_client i2c_client; /* to fill .adapter and .addr */
	/* ----------------------------------------------- */

	struct {
		u8 start_reg;
		unsigned int count;
	} cache_dirty[3];

	struct {
		int detected;
		struct workqueue_struct *wq;
		struct work_struct w;
	} hp_detected;
};


/* Note: the functions (de)activate, (open|close)_stream, suspend|resume
 * require the SYSCLK running
 */

/* don't forget to specify I2C adapter and address in i2c_client field */
int snd_uda1380_activate(struct snd_uda1380 *uda);

void snd_uda1380_deactivate(struct snd_uda1380 *uda);
int snd_uda1380_add_mixer_controls(struct snd_uda1380 *uda, struct snd_card *card);
int snd_uda1380_open_stream(struct snd_uda1380 *uda, int stream);
int snd_uda1380_close_stream(struct snd_uda1380 *uda, int stream);
int snd_uda1380_suspend(struct snd_uda1380 *uda, pm_message_t state);
int snd_uda1380_resume(struct snd_uda1380 *uda);

void snd_uda1380_hp_connected(struct snd_uda1380 *uda, int connected); /* non atomic context */
void snd_uda1380_hp_detected(struct snd_uda1380 *uda, int detected); /* atomic context */

#endif /* __SOUND_UDA1380_H */