2,851
社区成员




QRB2210 SPI设备在qupv3_se0_SPI上的漏洞问题
我试图使用对下面的设备树所做的修改在QRB2210上启动SPI设备,但在dmesg中遇到以下错误,并且在/dev目录中找不到可用的spidev设备:
/ # dmesg | grep spi
[ 10.610471] scuba-pinctrl 500000.pinctrl: pin-0 (4a80000.spi) status -22
[ 10.627878] spi_geni 4a80000.spi: Error applying setting, reverse things back
[ 10.635143] spi_geni: probe of 4a80000.spi failed with error -22
/ #
您能帮助描述这些错误消息并提供建议,以帮助我们使用qupv3_se0_SPI接口初始化QRB2210 devkit上的SPI设备吗?
以下是我们的DTS:
qupv3_se0_spi: spi@4a80000 {
compatible = "qcom,spi-geni";
reg = <0x4a80000 0x4000>;
#address-cells = <1>;
#size-cells = <0>;
reg-names = "se_phys";
interrupts = <GIC_SPI 327 IRQ_TYPE_LEVEL_HIGH>;
clock-names = "se-clk", "m-ahb", "s-ahb";
clocks = <&gcc GCC_QUPV3_WRAP0_S0_CLK>,
<&gcc GCC_QUPV3_WRAP_0_M_AHB_CLK>,
<&gcc GCC_QUPV3_WRAP_0_S_AHB_CLK>;
pinctrl-names = "default", "sleep";
pinctrl-0 = <&qupv3_se0_spi_active>;
pinctrl-1 = <&qupv3_se0_spi_sleep>;
dmas = <&gpi_dma0 0 0 1 64 0>,
<&gpi_dma0 1 0 1 64 0>;
dma-names = "tx", "rx";
spi-max-frequency = <50000000>;
qcom,wrapper-core = <&qupv3_0>;
status = "okay";
spidev@0 {
status = "okay";
compatible = "qcom,spidev"; // Defined in SPIDEV compatible array by Qualcomm in this kernel
reg = <0>;
spi-max-frequency = <50000000>; // SPI clock frequency (50MHz)
spi-cpha; // Define this, we are CPHA=1
spi-lsb-first; // Define this, we are sending data Least Significant Bit First.
};
};
qupv3_se0_spi_pins: qupv3_se0_spi_pins {
qupv3_se0_spi_active: qupv3_se0_spi_active {
mux {
pins = "gpio0", "gpio1",
"gpio2", "gpio3";
function = "qup0";
};
config {
pins = "gpio0", "gpio1",
"gpio2", "gpio3";
drive-strength = <8>;
bias-pull-up;
};
};
qupv3_se0_spi_sleep: qupv3_se0_spi_sleep {
mux {
pins = "gpio0", "gpio1",
"gpio2", "gpio3";
function = "gpio";
};
config {
pins = "gpio0", "gpio1",
"gpio2", "gpio3";
drive-strength = <6>;
bias-disable;
};
};
};
需要修改device-tree的代码:
apps_proc/src/vendor/qcom/proprietary/devicetree/qcom/scuba.dtsi 中添加
&qupv3_se0_spi {
status = "ok";
};
需要修改的kernel的代码:
drivers/pinctrl/qcom/pinctrl-scuba.c 改为
static const int scuba_reserved_gpios[] = {
// 0, 1, 2, 3, 14, 15, 16, 17, -1
14, 15, 16, 17, -1
};
/*
static const struct msm_gpio_wakeirq_map scuba_mpm_map[] = {