工具与软件:
你(们)好
目前、我们正在将定制电路板从 SDK 9.2迁移到10.1。 很遗憾、 tscadc0器件在 Linux 端不再工作。
设备树配置为:
&wkup_pmx2 {
mcu_adc0_pins_default: mcu-adc0-pins-default {
pinctrl-single,pins = <
J784S4_WKUP_IOPAD(0x0cc, PIN_INPUT, 0) /* (P36) MCU_ADC0_AIN0 */ /* WKUP_PADCONFIG_77 */
J784S4_WKUP_IOPAD(0x0d0, PIN_INPUT, 0) /* (V36) MCU_ADC0_AIN1 */ /* WKUP_PADCONFIG_78 */
J784S4_WKUP_IOPAD(0x0d4, PIN_INPUT, 0) /* (T34) MCU_ADC0_AIN2 */ /* WKUP_PADCONFIG_79 */
J784S4_WKUP_IOPAD(0x0d8, PIN_INPUT, 0) /* (T36) MCU_ADC0_AIN3 */ /* WKUP_PADCONFIG_80 */
J784S4_WKUP_IOPAD(0x0dc, PIN_INPUT, 0) /* (P34) MCU_ADC0_AIN4 */ /* WKUP_PADCONFIG_81 */
J784S4_WKUP_IOPAD(0x0e0, PIN_INPUT, 0) /* (R37) MCU_ADC0_AIN5 */ /* WKUP_PADCONFIG_82 */
J784S4_WKUP_IOPAD(0x0e4, PIN_INPUT, 0) /* (R33) MCU_ADC0_AIN6 */ /* WKUP_PADCONFIG_83 */
J784S4_WKUP_IOPAD(0x0e8, PIN_INPUT, 0) /* (V38) MCU_ADC0_AIN7 */ /* WKUP_PADCONFIG_84 */
>;
};
};
&tscadc0 {
pinctrl-0 = <&mcu_adc0_pins_default>;
pinctrl-names = "default";
status = "okay";
adc {
ti,adc-channels = <0 1 2 3 4 5 6 7>;
};
};
下面是我们看到的一些调试消息:
[ 18.343131] platform 40200000.tscadc: Retrying from deferred list [ 18.343205] bus: 'platform': __driver_probe_device: matched device 40200000.tscadc with driver ti_am3359-tscadc [ 18.343210] bus: 'platform': really_probe: probing driver ti_am3359-tscadc with device 40200000.tscadc [ 18.343427] ti_am3359-tscadc 40200000.tscadc: Driver ti_am3359-tscadc requests probe deferral [ 18.343431] really_probe: call_driver_probe(40200000.tscadc) failed [ 18.343453] platform 40200000.tscadc: Added to deferred list
经过 几个小时的调试后、我们发现以下函数中的 drivers/base/dd.c 中的探测器出现故障:
static int call_driver_probe(struct device *dev, struct device_driver *drv)
{
int ret = 0;
if (dev->bus->probe)
ret = dev->bus->probe(dev);
else if (drv->probe)
ret = drv->probe(dev);
switch (ret) {
case 0:
break;
case -EPROBE_DEFER:
/* Driver requested deferred probing */
dev_dbg(dev, "Driver %s requests probe deferral\n", drv->name);
break;
case -ENODEV:
case -ENXIO:
pr_debug("%s: probe of %s rejects match %d\n",
drv->name, dev_name(dev), ret);
break;
default:
/* driver matched but the probe failed */
pr_warn("%s: probe of %s failed with error %d\n",
drv->name, dev_name(dev), ret);
break;
}
return ret;
}
我们是否错过了 u-boot/MCU 1/0固件中阻止对总线进行访问的某些配置?
此致
Daniel