Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiphi1978
linux
提交
911fc25d
L
linux
项目概览
xiphi1978
/
linux
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
911fc25d
编写于
10月 27, 2008
作者:
T
Takashi Iwai
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'topic/asoc-next' into topic/asoc
上级
4b7d2831
6b933116
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
109 addition
and
138 deletion
+109
-138
include/sound/soc-dapm.h
include/sound/soc-dapm.h
+0
-2
sound/soc/codecs/wm8580.c
sound/soc/codecs/wm8580.c
+53
-55
sound/soc/codecs/wm8580.h
sound/soc/codecs/wm8580.h
+1
-0
sound/soc/codecs/wm8900.c
sound/soc/codecs/wm8900.c
+54
-59
sound/soc/codecs/wm8900.h
sound/soc/codecs/wm8900.h
+1
-0
sound/soc/soc-dapm.c
sound/soc/soc-dapm.c
+0
-22
未找到文件。
include/sound/soc-dapm.h
浏览文件 @
911fc25d
...
...
@@ -221,8 +221,6 @@ int snd_soc_dapm_new_controls(struct snd_soc_codec *codec,
int
num
);
/* dapm path setup */
int
__deprecated
snd_soc_dapm_connect_input
(
struct
snd_soc_codec
*
codec
,
const
char
*
sink_name
,
const
char
*
control_name
,
const
char
*
src_name
);
int
snd_soc_dapm_new_widgets
(
struct
snd_soc_codec
*
codec
);
void
snd_soc_dapm_free
(
struct
snd_soc_device
*
socdev
);
int
snd_soc_dapm_add_routes
(
struct
snd_soc_codec
*
codec
,
...
...
sound/soc/codecs/wm8580.c
浏览文件 @
911fc25d
...
...
@@ -900,85 +900,85 @@ static struct snd_soc_device *wm8580_socdev;
* low = 0x1a
* high = 0x1b
*/
static
unsigned
short
normal_i2c
[]
=
{
0
,
I2C_CLIENT_END
};
/* Magic definition of all other variables and things */
I2C_CLIENT_INSMOD
;
static
struct
i2c_driver
wm8580_i2c_driver
;
static
struct
i2c_client
client_template
;
static
int
wm8580_codec_probe
(
struct
i2c_adapter
*
adap
,
int
addr
,
int
kind
)
static
int
wm8580_i2c_probe
(
struct
i2c_client
*
i2c
,
const
struct
i2c_device_id
*
id
)
{
struct
snd_soc_device
*
socdev
=
wm8580_socdev
;
struct
wm8580_setup_data
*
setup
=
socdev
->
codec_data
;
struct
snd_soc_codec
*
codec
=
socdev
->
codec
;
struct
i2c_client
*
i2c
;
int
ret
;
if
(
addr
!=
setup
->
i2c_address
)
return
-
ENODEV
;
client_template
.
adapter
=
adap
;
client_template
.
addr
=
addr
;
i2c
=
kmemdup
(
&
client_template
,
sizeof
(
client_template
),
GFP_KERNEL
);
if
(
i2c
==
NULL
)
{
kfree
(
codec
);
return
-
ENOMEM
;
}
i2c_set_clientdata
(
i2c
,
codec
);
codec
->
control_data
=
i2c
;
ret
=
i2c_attach_client
(
i2c
);
if
(
ret
<
0
)
{
dev_err
(
&
i2c
->
dev
,
"failed to attach codec at addr %x
\n
"
,
addr
);
goto
err
;
}
ret
=
wm8580_init
(
socdev
);
if
(
ret
<
0
)
{
if
(
ret
<
0
)
dev_err
(
&
i2c
->
dev
,
"failed to initialise WM8580
\n
"
);
goto
err
;
}
return
ret
;
err:
kfree
(
codec
);
kfree
(
i2c
);
return
ret
;
}
static
int
wm8580_i2c_
detach
(
struct
i2c_client
*
client
)
static
int
wm8580_i2c_
remove
(
struct
i2c_client
*
client
)
{
struct
snd_soc_codec
*
codec
=
i2c_get_clientdata
(
client
);
i2c_detach_client
(
client
);
kfree
(
codec
->
reg_cache
);
kfree
(
client
);
return
0
;
}
static
int
wm8580_i2c_attach
(
struct
i2c_adapter
*
adap
)
{
return
i2c_probe
(
adap
,
&
addr_data
,
wm8580_codec_probe
);
}
static
const
struct
i2c_device_id
wm8580_i2c_id
[]
=
{
{
"wm8580"
,
0
},
{
}
};
MODULE_DEVICE_TABLE
(
i2c
,
wm8580_i2c_id
);
/* corgi i2c codec control layer */
static
struct
i2c_driver
wm8580_i2c_driver
=
{
.
driver
=
{
.
name
=
"WM8580 I2C Codec"
,
.
owner
=
THIS_MODULE
,
},
.
attach_adapter
=
wm8580_i2c_attach
,
.
detach_client
=
wm8580_i2c_detach
,
.
command
=
NULL
,
.
probe
=
wm8580_i2c_probe
,
.
remove
=
wm8580_i2c_remove
,
.
id_table
=
wm8580_i2c_id
,
};
static
struct
i2c_client
client_template
=
{
.
name
=
"WM8580"
,
.
driver
=
&
wm8580_i2c_driver
,
};
static
int
wm8580_add_i2c_device
(
struct
platform_device
*
pdev
,
const
struct
wm8580_setup_data
*
setup
)
{
struct
i2c_board_info
info
;
struct
i2c_adapter
*
adapter
;
struct
i2c_client
*
client
;
int
ret
;
ret
=
i2c_add_driver
(
&
wm8580_i2c_driver
);
if
(
ret
!=
0
)
{
dev_err
(
&
pdev
->
dev
,
"can't add i2c driver
\n
"
);
return
ret
;
}
memset
(
&
info
,
0
,
sizeof
(
struct
i2c_board_info
));
info
.
addr
=
setup
->
i2c_address
;
strlcpy
(
info
.
type
,
"wm8580"
,
I2C_NAME_SIZE
);
adapter
=
i2c_get_adapter
(
setup
->
i2c_bus
);
if
(
!
adapter
)
{
dev_err
(
&
pdev
->
dev
,
"can't get i2c adapter %d
\n
"
,
setup
->
i2c_bus
);
goto
err_driver
;
}
client
=
i2c_new_device
(
adapter
,
&
info
);
i2c_put_adapter
(
adapter
);
if
(
!
client
)
{
dev_err
(
&
pdev
->
dev
,
"can't add i2c device at 0x%x
\n
"
,
(
unsigned
int
)
info
.
addr
);
goto
err_driver
;
}
return
0
;
err_driver:
i2c_del_driver
(
&
wm8580_i2c_driver
);
return
-
ENODEV
;
}
#endif
static
int
wm8580_probe
(
struct
platform_device
*
pdev
)
...
...
@@ -1011,11 +1011,8 @@ static int wm8580_probe(struct platform_device *pdev)
#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
if
(
setup
->
i2c_address
)
{
normal_i2c
[
0
]
=
setup
->
i2c_address
;
codec
->
hw_write
=
(
hw_write_t
)
i2c_master_send
;
ret
=
i2c_add_driver
(
&
wm8580_i2c_driver
);
if
(
ret
!=
0
)
printk
(
KERN_ERR
"can't add i2c driver"
);
ret
=
wm8580_add_i2c_device
(
pdev
,
setup
);
}
#else
/* Add other interfaces here */
...
...
@@ -1034,6 +1031,7 @@ static int wm8580_remove(struct platform_device *pdev)
snd_soc_free_pcms
(
socdev
);
snd_soc_dapm_free
(
socdev
);
#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
i2c_unregister_device
(
codec
->
control_data
);
i2c_del_driver
(
&
wm8580_i2c_driver
);
#endif
kfree
(
codec
->
private_data
);
...
...
sound/soc/codecs/wm8580.h
浏览文件 @
911fc25d
...
...
@@ -29,6 +29,7 @@
#define WM8580_CLKSRC_NONE 5
struct
wm8580_setup_data
{
int
i2c_bus
;
unsigned
short
i2c_address
;
};
...
...
sound/soc/codecs/wm8900.c
浏览文件 @
911fc25d
...
...
@@ -1387,89 +1387,86 @@ static struct snd_soc_device *wm8900_socdev;
#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
static
unsigned
short
normal_i2c
[]
=
{
0
,
I2C_CLIENT_END
};
/* Magic definition of all other variables and things */
I2C_CLIENT_INSMOD
;
static
struct
i2c_driver
wm8900_i2c_driver
;
static
struct
i2c_client
client_template
;
/* If the i2c layer weren't so broken, we could pass this kind of data
around */
static
int
wm8900_codec_probe
(
struct
i2c_adapter
*
adap
,
int
addr
,
int
kind
)
static
int
wm8900_i2c_probe
(
struct
i2c_client
*
i2c
,
const
struct
i2c_device_id
*
id
)
{
struct
snd_soc_device
*
socdev
=
wm8900_socdev
;
struct
wm8900_setup_data
*
setup
=
socdev
->
codec_data
;
struct
snd_soc_codec
*
codec
=
socdev
->
codec
;
struct
i2c_client
*
i2c
;
int
ret
;
if
(
addr
!=
setup
->
i2c_address
)
return
-
ENODEV
;
dev_err
(
&
adap
->
dev
,
"Probe on %x
\n
"
,
addr
);
client_template
.
adapter
=
adap
;
client_template
.
addr
=
addr
;
i2c
=
kmemdup
(
&
client_template
,
sizeof
(
client_template
),
GFP_KERNEL
);
if
(
i2c
==
NULL
)
{
kfree
(
codec
);
return
-
ENOMEM
;
}
i2c_set_clientdata
(
i2c
,
codec
);
codec
->
control_data
=
i2c
;
ret
=
i2c_attach_client
(
i2c
);
if
(
ret
<
0
)
{
dev_err
(
&
adap
->
dev
,
"failed to attach codec at addr %x
\n
"
,
addr
);
goto
err
;
}
ret
=
wm8900_init
(
socdev
);
if
(
ret
<
0
)
{
dev_err
(
&
adap
->
dev
,
"failed to initialise WM8900
\n
"
);
goto
err
;
}
return
ret
;
err:
kfree
(
codec
);
kfree
(
i2c
);
if
(
ret
<
0
)
dev_err
(
&
i2c
->
dev
,
"failed to initialise WM8900
\n
"
);
return
ret
;
}
static
int
wm8900_i2c_
detach
(
struct
i2c_client
*
client
)
static
int
wm8900_i2c_
remove
(
struct
i2c_client
*
client
)
{
struct
snd_soc_codec
*
codec
=
i2c_get_clientdata
(
client
);
i2c_detach_client
(
client
);
kfree
(
codec
->
reg_cache
);
kfree
(
client
);
return
0
;
}
static
int
wm8900_i2c_attach
(
struct
i2c_adapter
*
adap
)
{
return
i2c_probe
(
adap
,
&
addr_data
,
wm8900_codec_probe
);
}
static
const
struct
i2c_device_id
wm8900_i2c_id
[]
=
{
{
"wm8900"
,
0
},
{
}
};
MODULE_DEVICE_TABLE
(
i2c
,
wm8900_i2c_id
);
/* corgi i2c codec control layer */
static
struct
i2c_driver
wm8900_i2c_driver
=
{
.
driver
=
{
.
name
=
"WM8900 I2C codec"
,
.
owner
=
THIS_MODULE
,
},
.
attach_adapter
=
wm8900_i2c_attach
,
.
detach_client
=
wm8900_i2c_detach
,
.
command
=
NULL
,
.
probe
=
wm8900_i2c_probe
,
.
remove
=
wm8900_i2c_remove
,
.
id_table
=
wm8900_i2c_id
,
};
static
struct
i2c_client
client_template
=
{
.
name
=
"WM8900"
,
.
driver
=
&
wm8900_i2c_driver
,
};
static
int
wm8900_add_i2c_device
(
struct
platform_device
*
pdev
,
const
struct
wm8900_setup_data
*
setup
)
{
struct
i2c_board_info
info
;
struct
i2c_adapter
*
adapter
;
struct
i2c_client
*
client
;
int
ret
;
ret
=
i2c_add_driver
(
&
wm8900_i2c_driver
);
if
(
ret
!=
0
)
{
dev_err
(
&
pdev
->
dev
,
"can't add i2c driver
\n
"
);
return
ret
;
}
memset
(
&
info
,
0
,
sizeof
(
struct
i2c_board_info
));
info
.
addr
=
setup
->
i2c_address
;
strlcpy
(
info
.
type
,
"wm8900"
,
I2C_NAME_SIZE
);
adapter
=
i2c_get_adapter
(
setup
->
i2c_bus
);
if
(
!
adapter
)
{
dev_err
(
&
pdev
->
dev
,
"can't get i2c adapter %d
\n
"
,
setup
->
i2c_bus
);
goto
err_driver
;
}
client
=
i2c_new_device
(
adapter
,
&
info
);
i2c_put_adapter
(
adapter
);
if
(
!
client
)
{
dev_err
(
&
pdev
->
dev
,
"can't add i2c device at 0x%x
\n
"
,
(
unsigned
int
)
info
.
addr
);
goto
err_driver
;
}
return
0
;
err_driver:
i2c_del_driver
(
&
wm8900_i2c_driver
);
return
-
ENODEV
;
}
#endif
static
int
wm8900_probe
(
struct
platform_device
*
pdev
)
...
...
@@ -1497,11 +1494,8 @@ static int wm8900_probe(struct platform_device *pdev)
wm8900_socdev
=
socdev
;
#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
if
(
setup
->
i2c_address
)
{
normal_i2c
[
0
]
=
setup
->
i2c_address
;
codec
->
hw_write
=
(
hw_write_t
)
i2c_master_send
;
ret
=
i2c_add_driver
(
&
wm8900_i2c_driver
);
if
(
ret
!=
0
)
printk
(
KERN_ERR
"can't add i2c driver"
);
ret
=
wm8900_add_i2c_device
(
pdev
,
setup
);
}
#else
#error Non-I2C interfaces not yet supported
...
...
@@ -1521,6 +1515,7 @@ static int wm8900_remove(struct platform_device *pdev)
snd_soc_free_pcms
(
socdev
);
snd_soc_dapm_free
(
socdev
);
#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
i2c_unregister_device
(
codec
->
control_data
);
i2c_del_driver
(
&
wm8900_i2c_driver
);
#endif
kfree
(
codec
);
...
...
sound/soc/codecs/wm8900.h
浏览文件 @
911fc25d
...
...
@@ -55,6 +55,7 @@
#define WM8900_
struct
wm8900_setup_data
{
int
i2c_bus
;
unsigned
short
i2c_address
;
};
...
...
sound/soc/soc-dapm.c
浏览文件 @
911fc25d
...
...
@@ -1006,28 +1006,6 @@ static int snd_soc_dapm_add_route(struct snd_soc_codec *codec,
return
ret
;
}
/**
* snd_soc_dapm_connect_input - connect dapm widgets
* @codec: audio codec
* @sink: name of target widget
* @control: mixer control name
* @source: name of source name
*
* Connects 2 dapm widgets together via a named audio path. The sink is
* the widget receiving the audio signal, whilst the source is the sender
* of the audio signal.
*
* This function has been deprecated in favour of snd_soc_dapm_add_routes().
*
* Returns 0 for success else error.
*/
int
snd_soc_dapm_connect_input
(
struct
snd_soc_codec
*
codec
,
const
char
*
sink
,
const
char
*
control
,
const
char
*
source
)
{
return
snd_soc_dapm_add_route
(
codec
,
sink
,
control
,
source
);
}
EXPORT_SYMBOL_GPL
(
snd_soc_dapm_connect_input
);
/**
* snd_soc_dapm_add_routes - Add routes between DAPM widgets
* @codec: codec
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录