mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 20:32:04 +09:00
newton:update config file,modify cs42l52
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.32.27
|
||||
# Tue Aug 2 19:48:07 2011
|
||||
# Tue Aug 9 21:13:28 2011
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||
@@ -906,8 +906,9 @@ CONFIG_RK29_NEWTON=y
|
||||
# Motion Sensors Support
|
||||
#
|
||||
# CONFIG_MPU_NONE is not set
|
||||
# CONFIG_SENSORS_MPU3050 is not set
|
||||
# CONFIG_SENSORS_MPU6000 is not set
|
||||
# CONFIG_MPU_SENSORS_MPU3050 is not set
|
||||
# CONFIG_MPU_SENSORS_MPU6000 is not set
|
||||
# CONFIG_MPU_SENSORS_TIMERIRQ is not set
|
||||
CONFIG_HAVE_IDE=y
|
||||
# CONFIG_IDE is not set
|
||||
|
||||
@@ -1081,6 +1082,7 @@ CONFIG_INPUT_TOUCHSCREEN=y
|
||||
# CONFIG_SINTEK_3FA16 is not set
|
||||
# CONFIG_EETI_EGALAX is not set
|
||||
# CONFIG_TOUCHSCREEN_IT7260 is not set
|
||||
# CONFIG_TOUCHSCREEN_NAS is not set
|
||||
# CONFIG_TOUCHSCREEN_GT801_IIC is not set
|
||||
# CONFIG_TOUCHSCREEN_GT818_IIC is not set
|
||||
# CONFIG_D70_L3188A is not set
|
||||
@@ -1106,7 +1108,7 @@ CONFIG_COMPASS_AK8975=y
|
||||
CONFIG_G_SENSOR_DEVICE=y
|
||||
# CONFIG_GS_MMA7660 is not set
|
||||
CONFIG_GS_MMA8452=y
|
||||
# CONFIG_GS_L3G4200D is not set
|
||||
CONFIG_GS_L3G4200D=y
|
||||
# CONFIG_INPUT_JOGBALL is not set
|
||||
# CONFIG_LIGHT_SENSOR_DEVICE is not set
|
||||
|
||||
@@ -1511,6 +1513,7 @@ CONFIG_DISPLAY_SUPPORT=y
|
||||
# CONFIG_LCD_RGB_TFT480800_25_E is not set
|
||||
# CONFIG_LCD_HSD100PXN is not set
|
||||
# CONFIG_LCD_HSD07PFW1 is not set
|
||||
# CONFIG_LCD_BYD8688FTGF is not set
|
||||
# CONFIG_LCD_B101AW06 is not set
|
||||
# CONFIG_LCD_LS035Y8DX02A is not set
|
||||
# CONFIG_LCD_CPTCLAA038LA31XE is not set
|
||||
|
||||
@@ -259,17 +259,6 @@ static int rk29_fb_io_init(struct rk29_fb_setting_info *fb_setting)
|
||||
printk(">>>>>> FB_DISPLAY_ON_PIN gpio_request err \n ");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = gpio_request(TOUCH_SCREEN_DISPLAY_PIN, NULL);
|
||||
if(ret != 0)
|
||||
{
|
||||
gpio_free(TOUCH_SCREEN_DISPLAY_PIN);
|
||||
printk(">>>>>> TOUCH_SCREEN_DISPLAY_PIN gpio_request err \n ");
|
||||
}
|
||||
gpio_direction_output(TOUCH_SCREEN_DISPLAY_PIN, 0);
|
||||
gpio_set_value(TOUCH_SCREEN_DISPLAY_PIN, TOUCH_SCREEN_DISPLAY_VALUE);
|
||||
}
|
||||
}
|
||||
|
||||
if(fb_setting->disp_on_en)
|
||||
@@ -283,17 +272,6 @@ static int rk29_fb_io_init(struct rk29_fb_setting_info *fb_setting)
|
||||
printk(">>>>>> FB_LCD_STANDBY_PIN gpio_request err \n ");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = gpio_request(TOUCH_SCREEN_STANDBY_PIN, NULL);
|
||||
if(ret != 0)
|
||||
{
|
||||
gpio_free(TOUCH_SCREEN_STANDBY_PIN);
|
||||
printk(">>>>>> TOUCH_SCREEN_STANDBY_PIN gpio_request err \n ");
|
||||
}
|
||||
gpio_direction_output(TOUCH_SCREEN_STANDBY_PIN, 0);
|
||||
gpio_set_value(TOUCH_SCREEN_STANDBY_PIN, TOUCH_SCREEN_STANDBY_VALUE);
|
||||
}
|
||||
}
|
||||
|
||||
if(FB_LCD_CABC_EN_PIN != INVALID_GPIO)
|
||||
@@ -833,7 +811,55 @@ static struct mma8452_platform_data mma8452_info = {
|
||||
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined (CONFIG_MPU_SENSORS_MPU3050)
|
||||
/*mpu3050*/
|
||||
static struct mpu3050_platform_data mpu3050_data = {
|
||||
.int_config = 0x10,
|
||||
//.orientation = { 1, 0, 0,0, -1, 0,0, 0, 1 },
|
||||
//.orientation = { 0, 1, 0,-1, 0, 0,0, 0, -1 },
|
||||
//.orientation = { -1, 0, 0,0, -1, 0,0, 0, -1 },
|
||||
.orientation = { 0, 1, 0, -1, 0, 0, 0, 0, 1 },
|
||||
.level_shifter = 0,
|
||||
#if defined (CONFIG_MPU_SENSORS_KXTF9)
|
||||
.accel = {
|
||||
#ifdef CONFIG_MPU_SENSORS_MPU3050_MODULE
|
||||
.get_slave_descr = NULL ,
|
||||
#else
|
||||
.get_slave_descr = get_accel_slave_descr ,
|
||||
#endif
|
||||
.adapt_num = 0, // The i2c bus to which the mpu device is
|
||||
// connected
|
||||
//.irq = RK29_PIN0_PA3,
|
||||
.bus = EXT_SLAVE_BUS_SECONDARY, //The secondary I2C of MPU
|
||||
.address = 0x0f,
|
||||
//.orientation = { 1, 0, 0,0, 1, 0,0, 0, 1 },
|
||||
//.orientation = { 0, -1, 0,-1, 0, 0,0, 0, -1 },
|
||||
//.orientation = { 0, 1, 0,1, 0, 0,0, 0, -1 },
|
||||
.orientation = { 0, 1 ,0, -1 ,0, 0, 0, 0, 1 },
|
||||
},
|
||||
#endif
|
||||
#if defined (CONFIG_MPU_SENSORS_AK8975)
|
||||
.compass = {
|
||||
#ifdef CONFIG_MPU_SENSORS_MPU3050_MODULE
|
||||
.get_slave_descr = NULL,/*ak5883_get_slave_descr,*/
|
||||
#else
|
||||
.get_slave_descr = get_compass_slave_descr,
|
||||
#endif
|
||||
.adapt_num = 0, // The i2c bus to which the compass device is.
|
||||
// It can be difference with mpu
|
||||
// connected
|
||||
//.irq = RK29_PIN0_PA4,
|
||||
.bus = EXT_SLAVE_BUS_PRIMARY,
|
||||
.address = 0x0d,
|
||||
//.orientation = { -1, 0, 0,0, -1, 0,0, 0, 1 },
|
||||
//.orientation = { 0, -1, 0,-1, 0, 0,0, 0, -1 },
|
||||
//.orientation = { 0, 1, 0,1, 0, 0,0, 0, -1 },
|
||||
//.orientation = { 0, -1, 0, 1, 0, 0, 0, 0, 1 },
|
||||
.orientation = { 0, 1, 0, -1, 0, 0, 0, 0, 1 },
|
||||
},
|
||||
};
|
||||
#endif
|
||||
#endif
|
||||
#if defined (CONFIG_BATTERY_BQ27510)
|
||||
#define DC_CHECK_PIN RK29_PIN4_PA1
|
||||
#define LI_LION_BAT_NUM 2
|
||||
@@ -1066,6 +1092,17 @@ static struct i2c_board_info __initdata board_i2c0_devices[] = {
|
||||
.irq = RK29_PIN0_PA4,
|
||||
},
|
||||
#endif
|
||||
/*mpu3050*/
|
||||
#if defined (CONFIG_MPU_SENSORS_MPU3050)
|
||||
{
|
||||
.type = "mpu3050",
|
||||
.addr = 0x68,
|
||||
.flags = 0,
|
||||
.irq = RK29_PIN5_PA3,
|
||||
.platform_data = &mpu3050_data,
|
||||
},
|
||||
#endif
|
||||
|
||||
#if defined (CONFIG_SND_SOC_CS42L52)
|
||||
{
|
||||
.type = "cs42l52",
|
||||
@@ -1792,6 +1829,10 @@ struct platform_device newton_usb_mass_storage_device = {
|
||||
.platform_data = &newton_mass_storage_pdata,
|
||||
},
|
||||
};
|
||||
#endif
|
||||
static struct platform_device rk29_cs42l52_device = {
|
||||
.name = "rk29_cs42l52",
|
||||
.id = -1,
|
||||
};
|
||||
|
||||
static void __init rk29_board_iomux_init(void)
|
||||
@@ -1942,6 +1983,9 @@ static struct platform_device *devices[] __initdata = {
|
||||
#endif
|
||||
#ifdef CONFIG_LEDS_NEWTON_PWM
|
||||
&rk29_device_pwm_leds,
|
||||
#endif
|
||||
#ifdef CONFIG_SND_RK29_SOC_CS42L52
|
||||
&rk29_cs42l52_device,
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
@@ -25,14 +25,27 @@
|
||||
#include "rk29_pcm.h"
|
||||
#include "rk29_i2s.h"
|
||||
|
||||
#if 0
|
||||
#define DBG(x...) printk(KERN_INFO x)
|
||||
#else
|
||||
#define DBG(x...)
|
||||
#endif
|
||||
|
||||
#define HW_PARAMS_FLAG_EQVOL_ON 0x21
|
||||
#define HW_PARAMS_FLAG_EQVOL_OFF 0x22
|
||||
static const struct snd_soc_dapm_widget cs42l52_dapm_widgets[] = {
|
||||
SND_SOC_DAPM_LINE("Audio Out", NULL),
|
||||
SND_SOC_DAPM_LINE("Line in", NULL),
|
||||
SND_SOC_DAPM_MIC("Micn", NULL),
|
||||
SND_SOC_DAPM_MIC("Micp", NULL),
|
||||
};
|
||||
|
||||
static int rk29_hw_params(struct snd_pcm_substream *substream,
|
||||
static const struct snd_soc_dapm_route audio_map[]= {
|
||||
|
||||
{"Audio Out", NULL, "HPA"},
|
||||
{"Audio Out", NULL, "HPB"},
|
||||
{"Line in", NULL, "INPUT1A"},
|
||||
{"Line in", NULL, "INPUT1B"},
|
||||
{"Micn", NULL, "INPUT2A"},
|
||||
{"Micp", NULL, "INPUT2B"},
|
||||
};
|
||||
|
||||
static int rk29_cs42l52_hw_params(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *params)
|
||||
{
|
||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
@@ -44,43 +57,32 @@ static int rk29_hw_params(struct snd_pcm_substream *substream,
|
||||
struct clk *general_pll;
|
||||
int ret;
|
||||
|
||||
DBG("Enter::%s----%d\n",__FUNCTION__,__LINE__);
|
||||
/*by Vincent Hsiung for EQ Vol Change*/
|
||||
#define HW_PARAMS_FLAG_EQVOL_ON 0x21
|
||||
#define HW_PARAMS_FLAG_EQVOL_OFF 0x22
|
||||
if ((params->flags == HW_PARAMS_FLAG_EQVOL_ON)||(params->flags == HW_PARAMS_FLAG_EQVOL_OFF))
|
||||
{
|
||||
ret = codec_dai->ops->hw_params(substream, params, codec_dai); //by Vincent
|
||||
DBG("Enter::%s----%d\n",__FUNCTION__,__LINE__);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* set codec DAI configuration */
|
||||
#if defined (CONFIG_SND_RK29_CODEC_SOC_SLAVE)
|
||||
ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S |
|
||||
SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS);
|
||||
ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS);
|
||||
#endif
|
||||
#if defined (CONFIG_SND_RK29_CODEC_SOC_MASTER)
|
||||
ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S |
|
||||
SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM);
|
||||
ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM);
|
||||
#endif
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
/* set cpu DAI configuration */
|
||||
#if defined (CONFIG_SND_RK29_CODEC_SOC_SLAVE)
|
||||
ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S |
|
||||
SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM);
|
||||
ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM);
|
||||
#endif
|
||||
#if defined (CONFIG_SND_RK29_CODEC_SOC_MASTER)
|
||||
ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S |
|
||||
SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS);
|
||||
|
||||
ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S |SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS);
|
||||
#endif
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
DBG("Enter:%s, rate=%d\n",__FUNCTION__,params_rate(params));
|
||||
|
||||
switch(params_rate(params)) {
|
||||
case 8000:
|
||||
@@ -96,19 +98,10 @@ static int rk29_hw_params(struct snd_pcm_substream *substream,
|
||||
pll_out = 11289600;
|
||||
break;
|
||||
default:
|
||||
DBG("Enter:%s, Error rate=%d\n",__FUNCTION__,params_rate(params));
|
||||
return -EINVAL;
|
||||
break;
|
||||
}
|
||||
|
||||
//pll_out = 12000000;
|
||||
|
||||
#if defined (CONFIG_SND_RK29_CODEC_SOC_MASTER)
|
||||
pll_out = 11289600;
|
||||
snd_soc_dai_set_sysclk(codec_dai, 0, pll_out, 0);
|
||||
snd_soc_dai_set_sysclk(cpu_dai, 0, pll_out, 0);
|
||||
#endif
|
||||
|
||||
#if defined (CONFIG_SND_RK29_CODEC_SOC_SLAVE)
|
||||
general_pll=clk_get(NULL, "general_pll");
|
||||
if(clk_get_rate(general_pll)>260000000)
|
||||
@@ -128,130 +121,111 @@ static int rk29_hw_params(struct snd_pcm_substream *substream,
|
||||
div_bclk=(pll_out)/params_rate(params)-1;
|
||||
div_mclk=0;
|
||||
}
|
||||
DBG("func is%s,gpll=%ld,pll_out=%ld,div_mclk=%ld,div_bclk=%ld\n",
|
||||
__FUNCTION__,clk_get_rate(general_pll),pll_out,div_mclk,div_bclk);
|
||||
|
||||
//snd_soc_dai_set_sysclk(codec_dai, 0, pll_out, 0);
|
||||
snd_soc_dai_set_sysclk(cpu_dai, 0, pll_out, 0);
|
||||
snd_soc_dai_set_clkdiv(cpu_dai, ROCKCHIP_DIV_BCLK,div_bclk);
|
||||
snd_soc_dai_set_clkdiv(cpu_dai, ROCKCHIP_DIV_MCLK, div_mclk);
|
||||
DBG("Enter:%s, LRCK=%d\n",__FUNCTION__,(pll_out/4)/params_rate(params));
|
||||
#endif
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct snd_soc_dapm_widget cs42l52_dapm_widgets[] = {
|
||||
SND_SOC_DAPM_LINE("Audio Out", NULL),
|
||||
SND_SOC_DAPM_LINE("Line in", NULL),
|
||||
SND_SOC_DAPM_MIC("Micn", NULL),
|
||||
SND_SOC_DAPM_MIC("Micp", NULL),
|
||||
};
|
||||
|
||||
static const struct snd_soc_dapm_route audio_map[]= {
|
||||
|
||||
{"Audio Out", NULL, "HPA"},
|
||||
{"Audio Out", NULL, "HPB"},
|
||||
{"Line in", NULL, "INPUT1A"},
|
||||
{"Line in", NULL, "INPUT1B"},
|
||||
{"Micn", NULL, "INPUT2A"},
|
||||
{"Micp", NULL, "INPUT2B"},
|
||||
};
|
||||
|
||||
/*
|
||||
* Logic for a cs42l52 as connected on a rockchip board.
|
||||
*/
|
||||
static int rk29_cs42l52_init(struct snd_soc_codec *codec)
|
||||
static int rk29_cs42l52_dai_init(struct snd_soc_codec *codec)
|
||||
{
|
||||
struct snd_soc_dai *codec_dai = &codec->dai[0];
|
||||
int ret;
|
||||
|
||||
DBG("Enter::%s----%d\n",__FUNCTION__,__LINE__);
|
||||
#if 0
|
||||
/* Add specific widgets */
|
||||
snd_soc_dapm_new_controls(codec, cs42l52_dapm_widgets,
|
||||
ARRAY_SIZE(cs42l52_dapm_widgets));
|
||||
|
||||
|
||||
DBG("Enter::%s----%d\n",__FUNCTION__,__LINE__);
|
||||
/* Set up specific audio path audio_mapnects */
|
||||
snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map));
|
||||
#endif
|
||||
|
||||
snd_soc_dapm_nc_pin(codec, "INPUT1A");
|
||||
snd_soc_dapm_nc_pin(codec, "INPUT2A");
|
||||
|
||||
snd_soc_dapm_nc_pin(codec, "INPUT3A");
|
||||
snd_soc_dapm_nc_pin(codec, "INPUT4A");
|
||||
|
||||
snd_soc_dapm_nc_pin(codec, "INPUT1B");
|
||||
snd_soc_dapm_nc_pin(codec, "INPUT2B");
|
||||
snd_soc_dapm_nc_pin(codec, "INPUT3B");
|
||||
snd_soc_dapm_nc_pin(codec, "INPUT4B");
|
||||
snd_soc_dapm_nc_pin(codec, "MICB");
|
||||
|
||||
snd_soc_dapm_sync(codec);
|
||||
|
||||
return 0;
|
||||
snd_soc_dapm_sync(codec);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct snd_soc_ops rk29_ops = {
|
||||
.hw_params = rk29_hw_params,
|
||||
static struct snd_soc_ops rk29_cs42l52_ops = {
|
||||
.hw_params = rk29_cs42l52_hw_params,
|
||||
};
|
||||
|
||||
static struct snd_soc_dai_link rk29_dai = {
|
||||
static struct snd_soc_dai_link rk29_cs42l52_dai_link = {
|
||||
.name = "CS42L52",
|
||||
.stream_name = "CS42L52 PCM",
|
||||
.cpu_dai = &rk29_i2s_dai[0],
|
||||
.codec_dai = &soc_cs42l52_dai,
|
||||
.init = rk29_cs42l52_init,
|
||||
.ops = &rk29_ops,
|
||||
.init = rk29_cs42l52_dai_init,
|
||||
.ops = &rk29_cs42l52_ops,
|
||||
};
|
||||
|
||||
static struct snd_soc_card snd_soc_card_rk29 = {
|
||||
static struct snd_soc_card snd_soc_card_rk29_cs42l52 = {
|
||||
.name = "RK29_CS42L52",
|
||||
.platform = &rk29_soc_platform,
|
||||
.dai_link = &rk29_dai,
|
||||
.dai_link = &rk29_cs42l52_dai_link,
|
||||
.num_links = 1,
|
||||
};
|
||||
|
||||
|
||||
static struct snd_soc_device rk29_snd_devdata = {
|
||||
.card = &snd_soc_card_rk29,
|
||||
static struct snd_soc_device rk29_cs42l52_snd_devdata = {
|
||||
.card = &snd_soc_card_rk29_cs42l52,
|
||||
.codec_dev = &soc_codec_dev_cs42l52,
|
||||
};
|
||||
|
||||
static struct platform_device *rk29_snd_device;
|
||||
static struct platform_device *rk29_cs42l52_snd_device;
|
||||
|
||||
static int __init audio_card_init(void)
|
||||
static int rk29_cs42l52_probe(struct platform_device *pdev)
|
||||
{
|
||||
int ret =0;
|
||||
DBG("Enter::%s----%d\n",__FUNCTION__, __LINE__);
|
||||
rk29_snd_device = platform_device_alloc("soc-audio", -1);
|
||||
if (!rk29_snd_device) {
|
||||
DBG("platform device allocation failed\n");
|
||||
printk("RK29 CS42L52 SoC Audio driver\n");
|
||||
rk29_cs42l52_snd_device = platform_device_alloc("soc-audio", -1);
|
||||
if (!rk29_cs42l52_snd_device) {
|
||||
ret = -ENOMEM;
|
||||
printk("%s:platform device alloc fail\n",__FUNCTION__);
|
||||
return ret;
|
||||
}
|
||||
platform_set_drvdata(rk29_snd_device, &rk29_snd_devdata);
|
||||
rk29_snd_devdata.dev = &rk29_snd_device->dev;
|
||||
ret = platform_device_add(rk29_snd_device);
|
||||
platform_set_drvdata(rk29_cs42l52_snd_device, &rk29_cs42l52_snd_devdata);
|
||||
rk29_cs42l52_snd_devdata.dev = &rk29_cs42l52_snd_device->dev;
|
||||
ret = platform_device_add(rk29_cs42l52_snd_device);
|
||||
if (ret) {
|
||||
DBG("platform device add failed\n");
|
||||
platform_device_put(rk29_snd_device);
|
||||
platform_device_put(rk29_cs42l52_snd_device);
|
||||
printk("%s:platform device add fail,ret = %d\n",__FUNCTION__,ret);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void __exit audio_card_exit(void)
|
||||
static int rk29_cs42l52_remove(struct platform_device *pdev)
|
||||
{
|
||||
platform_device_unregister(rk29_snd_device);
|
||||
platform_device_unregister(rk29_cs42l52_snd_device);
|
||||
return 0;
|
||||
}
|
||||
|
||||
module_init(audio_card_init);
|
||||
module_exit(audio_card_exit);
|
||||
/* Module information */
|
||||
static struct platform_driver rk29_cs42l52_driver = {
|
||||
.probe = rk29_cs42l52_probe,
|
||||
.remove = rk29_cs42l52_remove,
|
||||
.driver = {
|
||||
.name = "rk29_cs42l52",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
static int __init rk29_cs42l52_init(void)
|
||||
{
|
||||
return platform_driver_register(&rk29_cs42l52_driver);
|
||||
}
|
||||
|
||||
static void __exit rk29_cs42l52_exit(void)
|
||||
{
|
||||
platform_driver_unregister(&rk29_cs42l52_driver);
|
||||
}
|
||||
|
||||
module_init(rk29_cs42l52_init);
|
||||
module_exit(rk29_cs42l52_exit);
|
||||
MODULE_AUTHOR("rockchip");
|
||||
MODULE_DESCRIPTION("ROCKCHIP i2s ASoC Interface");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user