TDA7415調試小結

來源:互聯網
上載者:User

TDA7415內部的寄存器比較少,共32個,實際只會使用0~23和31這25個。其中0~23是功能寄存器,31寄存器是用於測試的。調試這個片子,建議先從測試寄存器入手,在其內部寫入0x3E,這樣就可以在相應的引腳上測得一個200KHz的訊號。如果順利到這一步,基本可以放心了,IIC通訊沒有問題,寫寄存器沒有問題。千萬記住,不要想當然的通過讀取寄存器的方法來確定IIC通訊是否有問題。接下來就是按照它的文檔配置那24個寄存器。

 

 

/*

 *  INIT part

 */  

static const struct i2c_device_id tda7415_id[] = {

    {"tda7415-i2c", 0},

    {},

};


MODULE_DEVICE_TABLE(i2c, tda7415_id);


static struct i2c_driver tda7415_i2c_driver = {

    .driver = {

    .name = "tda7415-i2c",

    .owner = THIS_MODULE,

},

    .probe = tda7415_i2c_probe,

    .remove = __devexit_p(tda7415_i2c_remove),

    .id_table = tda7415_id,

};


static int __init alsa_tda7415t_init(void)

{

    return i2c_add_driver(&tda7415_i2c_driver);

}


static void __exit alsa_tda7415t_exit(void)

{

    i2c_del_driver(&tda7415_i2c_driver);

}


module_init(alsa_tda7415t_init);

module_exit(alsa_tda7415t_exit);

 

 


static __devinit int tda7415_i2c_probe(struct i2c_client *client,

const struct i2c_device_id *id)

{

    struct tda7415_drvdata *drv_data;

    struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);

 

    printk("Debug at func %s(),line %d by tongjiang/n",__FUNCTION__,__LINE__);

 

    drv_data = kmalloc(sizeof(struct tda7415_drvdata), GFP_KERNEL);

if (drv_data == NULL) 

{

    printk(&client->dev, "DEV %s,lack of kernel memory!/n");

    return -ENOMEM;

}

if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) 

{

    printk(&adapter->dev,

    "DEV %s,I2C-Adapter doesn't support I2C_FUNC_SMBUS_WORD/n");

    return -EIO;

}

 

drv_data->client = client;

 

i2c_set_clientdata(client, drv_data);

mutex_init(&drv_data->lock);

 

tda7415_init_client(client);

return 0;

}

 

 

static struct i2c_board_info mxc_i2c0_board_info[] __initdata = {

{

    .type = "ov3640",

    .addr = 0x3C,

    .platform_data = (void *)&camera_data,

},

{

    .type = "tda7415-i2c",

    .addr = 0x46, 

    }

};

 

static int tda7415_init_client(struct i2c_client *client)

{

int i;

struct tda7415_drvdata *tda7415_data = i2c_get_clientdata(client);

u8 reg;

u8 data;

int ret = 0;

 

if (NULL == tda7415_data)

{

return -ENOMEM;

}

 

printk("Debug at func %s(),line %d by tongjiang/n",__FUNCTION__,__LINE__);

tda7415_data->audio7415_regbuf[0] = 0xff;

tda7415_data->audio7415_regbuf[1] = 0xd0;

tda7415_data->audio7415_regbuf[2] = 0xfe;//bass:40hz

tda7415_data->audio7415_regbuf[3] = 0xff;

tda7415_data->audio7415_regbuf[4] = 0xff;

tda7415_data->audio7415_regbuf[5] = 0xfe;

tda7415_data->audio7415_regbuf[6] = 0xff;//full mute

tda7415_data->audio7415_regbuf[7] = 0xff;//full mute

tda7415_data->audio7415_regbuf[8] = 0xff;//full mute

tda7415_data->audio7415_regbuf[9] = 0x30;//fast charge: must be setting release

tda7415_data->audio7415_regbuf[10] = 0x7c;

tda7415_data->audio7415_regbuf[11] = 0xec;//center, subwoof of the mix channel from AC3; Jowen.xiao091112

tda7415_data->audio7415_regbuf[12] = 0x76;//left & right channel high filter bypass

tda7415_data->audio7415_regbuf[13] = 0x70;

tda7415_data->audio7415_regbuf[14] = 0x70;

tda7415_data->audio7415_regbuf[15] = 0x70;

tda7415_data->audio7415_regbuf[16] = 0x70;

tda7415_data->audio7415_regbuf[17] = 0xf6;//stereo bypass

tda7415_data->audio7415_regbuf[18] = 0x70;

tda7415_data->audio7415_regbuf[19] = 0x70;

tda7415_data->audio7415_regbuf[20] = 0xfe;

tda7415_data->audio7415_regbuf[21] = 0xc8;

tda7415_data->audio7415_regbuf[22] = 0xf6;//y11110110;//sotf-mute time 5ms, soft-step 2.56ms

tda7415_data->audio7415_regbuf[23] = 0xf1;

 

memset(&tda7415_data->audio7415.curr_ch, 0, sizeof(Audio7415Struct));

 

tda7415_data->audio7415.bas = 0;

tda7415_data->audio7415.tre = 0;

tda7415_data->audio7415.mid = 0;

tda7415_data->audio7415.balance = 0;

tda7415_data->audio7415.fader = 0;

tda7415_data->audio7415.subwoof = 0;

tda7415_data->audio7415.center = 0;

 

reg = 0x5f;

data = 0x3E;

ret = tda7415_reg_write(client,reg,data);

printk("Initial write of tda7415 write over ret = %d/n",ret);

/*

for (i = 0; i < ARRAY_SIZE(tda7415_data->audio7415_regcache); i++) 

{

int v = i2c_smbus_read_byte_data(client, i);

if (v < 0)

{

return -ENODEV;

}

tda7415_data->audio7415_regcache[i] = v;

}

 

for (i = 0; i < ARRAY_SIZE(tda7415_data->audio7415_regcache); i++) 

{

printk("Debug read byte 0 is %d",tda7415_data->audio7415_regcache[i]);

}

*/

return 0;

}

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.