MTK平台釋疑android M 配置中斷相關問題


1.使用老方法(android L)配置中斷,調用request_irq函數時出錯,錯誤代碼 -22
 Dear Customer:
您好!
如電話溝通,貴司可以在發過來的code基礎上做下面的修改再試試:
(1)修改aw8155.c

static int aw8155_drv_probe(struct platform_device *dev)
{
//...

// ------------------ here add your code to init device tree
-------------------- start
aw8155_pinctrl1 =
devm_pinctrl_get(&dev->dev);
if (IS_ERR(aw8155_pinctrl1)) {

AW8155_LOGE("devm_pinctrl_get error\n");
}
else{ //add

pins_default = pinctrl_lookup_state(aw8155_pinctrl1, "default");
if
(IS_ERR(pins_default)) {
AW8155_LOGE("pinctrl_lookup_state default
error\n");
}

pa_pins_int = pinctrl_lookup_state(aw8155_pinctrl1,
"pa_ctl_output0");
if (IS_ERR(pa_pins_int)) {

AW8155_LOGE("pinctrl_lookup_state pa_ctl_output0 error\n");
}
else
//add
pinctrl_select_state(aw8155_pinctrl1, pa_pins_int);
}
// ------------------ here add your code to init device tree ---------------------- end
//...

#if 0 //add
static struct platform_device
aw8155_platform_device = {
.name = "aw8155",
.id = -1,
.dev = {

.release = aw8155_dev_release,
}
};
#endif
static int __init
aw8155_init(void)
{
int ret = 0;
AW8155_LOGD("+%s\n", __func__);

#if 0 //add
ret = platform_device_register
(&aw8155_platform_device);
if (ret) {

AW8155_LOGE("platform_device_register fail\n");
return ret;
}

#endif

(2)修改fc8180_spi.c
static int dtveint_drv_probe(struct
platform_device *dev)
{
//...
eint_pinctrl =
devm_pinctrl_get(&dev->dev);
if (IS_ERR(eint_pinctrl)) {

printk(KERN_INFO "eintDebug devm_pinctrl_get error\n");
}
else{
//add
pins_default = pinctrl_lookup_state(eint_pinctrl, "default");
if
(IS_ERR(pins_default)) {
printk(KERN_INFO "eintDebug pinctrl_lookup_state
default error\n");
}

eint_pins = pinctrl_lookup_state(eint_pinctrl,
"eint_cfg");
if (IS_ERR(eint_pins)) {
printk(KERN_INFO "eintDebug
pinctrl_lookup_state pa_ctl_output0 error\n");
}
else //add

pinctrl_select_state(eint_pinctrl, eint_pins);
}
//...

#if 0
//add
static struct platform_device dtveint_platform_device = {
.name =
"dtveint",
.id = -1,
.dev = {
.release = dtveint_dev_release,
}

};
#endif
static int dtveint_init(void)
{
int ret = 0;

printk(KERN_INFO "eintDebug +%s\n", __func__);
#if 0 //add
ret =
platform_device_register (&dtveint_platform_device);
if (ret) {

printk("eintDebug platform_device_register fail\n");
return ret;
}

#endif
//...
謝謝!

2.使用spi_device驅動調用devm_pinctrl_get(&spi->dev),出現錯誤,反復重啟,錯誤
”log見反復重啟.log“
 
Dear Customer:
您好!
您這個cust_eint.dtsi文件是通過window下運行dct
tool生成的吧,這個只是做個參考。我們真正使用的是編譯生成的cust.dtsi。所以您要check的話,可以check文件cust.dtsi。或者在linux下運行
dct生成相應的文件。

example:
(1)在window下運行dct
tool生成的cust_eint.dtsi文件中的accdet中斷為:
ACCDET@6 {
compatible = "mediatek,
ACCDET-eint";
interrupt-parent = <&eintc>;
interrupts = <6
8>;
debounce = <6 256000>;
};
(2)在linux下運行dct
生成的cust_eint_dtsi文件會在編譯生成cust.dtsi文件中的accdet中斷為:
&accdet {

interrupt-parent = <&eintc>;
interrupts = <6
IRQ_TYPE_LEVEL_LOW>;
debounce = <6 256000>;
status = "okay";

};

謝謝!
 
3.能否提供一個spi驅動設備樹配置的樣板,可能過后需要在spi驅動的probe中進行中斷和gpio的配置?
 
Dear Customer:
您好!
舉例,在SPI0 bus上掛device
(kernel-3.18\arch\arm64\boot\dts\xxxx.dts)

&spi0 {

#address-cells = <1>;
#size-cells = <0>;

label:Your
device name@0 {
compatible = "your compatible name";
reg = <0>;
=> 表示SPI0上的第一個device
spi-max-frequency = <xxxx>; =>
如有需要,可自行添加SPI相關的info,這里以max freq為例
/* your device info ….*/
};
};


 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM