Android5.1-s5p6818平台去掉MMA8653模块驱动、HDMI驱动、TVOUT驱动

来源:互联网 发布:安卓程序员待遇 编辑:程序博客网 时间:2024/05/21 20:30

根据需求,将加速度sensor mma8653以及hdmi、tvout都去掉。

一、

首先是MMA8653模块,根据新板子上面运行的代码log:追踪代码到 hwmon文件夹下mma8653.c文件,在文件里面可以看到,有读取数据等方法

static int mma8653_read_data(struct i2c_client *client, struct mma8653_acc *acc) {u8tmp_data[7];    //printk("%s....................%d.......................\n",__func__,__LINE__);if (i2c_smbus_read_i2c_block_data(client,MMA865X_OUT_X_MSB,7,tmp_data) < 7) {dev_err(&client->dev, "i2c block read failed\n");return -3;}acc->x = ((tmp_data[0] << 8) & 0xff00) | tmp_data[1];acc->y = ((tmp_data[2] << 8) & 0xff00) | tmp_data[3];acc->z = ((tmp_data[4] << 8) & 0xff00) | tmp_data[5];acc->x = -(short)(acc->x) >> 6;acc->y = -(short)(acc->y) >> 6;acc->z =  (short)(acc->z) >> 6;/*if (mma_status.mode == MODE_4G){(*x)=(*x)<<1;(*y)=(*y)<<1;(*z)=(*z)<<1;}else if (mma_status.mode == MODE_8G){(*x)=(*x)<<2;(*y)=(*y)<<2;(*z)=(*z)<<2;}*/return 0;}

,比如:

以及其他的初始化准备:

static int mma8653_set_mode(struct i2c_client *client, unsigned char mode){int comres = 0;unsigned char data = 0;comres = mma8653_smbus_read_byte(client, MMA8653_MODE_BIT__REG, &data);data  = MMA8653_SET_BITSLICE(data, MMA8653_MODE_BIT, mode);comres += mma8653_smbus_write_byte(client, MMA8653_MODE_BIT__REG, &data);return comres;}static int mma8653_get_mode(struct i2c_client *client, unsigned char *mode){int comres = 0;unsigned char data = 0;comres = mma8653_smbus_read_byte(client, MMA8653_MODE_BIT__REG, &data);*mode  = MMA8653_GET_BITSLICE(data, MMA8653_MODE_BIT);return comres;}static int mma8653_set_rate(struct i2c_client *client, unsigned char rate){int comres = 0;unsigned char data = 0;//comres += mma8653_smbus_read_byte(client, MMA8653_RATE_BIT__REG, &data);//data  = MMA8653_SET_BITSLICE(data, MMA8653_RATE_BIT, rate);//comres += mma8653_smbus_write_byte(client, MMA8653_RATE_BIT__REG, &data);return comres;}static int mma8653_get_rate(struct i2c_client *client, unsigned char *rate){int comres = 0;unsigned char data = 0;//comres = mma8653_smbus_read_byte(client, MMA8653_RATE_BIT__REG, &data);//*rate  = MMA8653_GET_BITSLICE(data, MMA8653_RATE_BIT);return comres;}static int mma8653_hw_init(struct i2c_client *client){int comres = 0;    int ret;// sample rate: 32//comres += mma8653_set_rate(client, MMA8653_RATE_120);    ret = i2c_smbus_read_byte_data(client,MMA865X_WHO_AM_I);printk("%s:addr = 0x%x, Read ID value is :%d\n",        __func__, client->addr, ret);i2c_smbus_write_byte_data(client, MMA865X_CTRL_REG1, 0);i2c_smbus_write_byte_data(client, MMA865X_XYZ_DATA_CFG,0);return comres;}


由此可见,这部分代码正是我不再需要的,那么直接将他从编译配置文件里面去掉应该就可以了。

找到此文件件hwmon里面的Kconfig文件,将里面的mma8653部分注释掉:

#config SENSORS_MMA865X#tristate "Freescale MMA865X 3-Axis Accelerometer"#depends on I2C#default n#help#Say Y here to enable the accelerometer.##If unsure, say N.


重新编译kernel,log里面没再出现i2c地址找不到的情况,应该相应代码没有在调用了。(本人新手,如果有发现这种修改不合理的地方欢迎指正和指导)


二、

HDMI 和TVout也是不需要的模块,正好据我了解,HDMI是TV子系统里面的,具体可参考华清~的这篇文章:http://blog.csdn.net/farsight2009/article/details/50697475,里面分析的很清晰详细了。

那就找到对应路径下面的文件,将其去掉吧。在~/kernel/drivers/media/video/s5p-tv/下面就是hdmi-drv.c文件了,(里面还有些其他文件我不知道搞什么鬼的)。在路径~/kernel/drivers/media/video/Kconfig的kconfig文件里面将source "drivers/media/video/s5p-tv/Kconfig注释掉

则hdmi驱动就不会被编译到了。

然后再路径/kernel/arch/arm/mach-exynos/Kconfig下面将kconfig文件里面的tvout配置也注释掉确保tvout的相关文件不被编译。

#config EXYNOS5_SETUP_TVOUT#bool#default y#help#  Common setup code for TVOUT


重新编译kernel进行测试,没有发现什么问题。如果发现修改有错或者有更好办法的,欢迎指正,谢谢。


0 0
原创粉丝点击