리눅스 커널에 대한 Q&A 게시판 입니다. (비밀글 체크는 꼭 필요한 경우에만)
2개의 동일 i2c device를 등록 시(동일 slave & 다른 마스터) 1개의 드라이버에서 사용시 문의
작성자
이플릿
작성일
2021-05-08 21:19
조회
154
안녕하세요. DT로 2개의 i2c device를 1개의 드라이버에서 device_id나 of_match_table로 등록 시
두개의 client를 1개의 드라이버에서 컨트롤 가능한가요?
예로 i2c로 1개의 드라이버로 2개의 led를 동시에 키는 동작입니다.
두개의 client를 1개의 드라이버에서 컨트롤 가능한가요?
예로 i2c로 1개의 드라이버로 2개의 led를 동시에 키는 동작입니다.
당연히 가능합니다. 많은 시스템들이 하나의 i2c 호스트 컨트롤러 드라이버 코드를 사용하여 다수의 i2c 호스트 컨트롤러를 다루고 있습니다.
또한 i2c 슬레이브 디바이스들도 역시 하나의 코드로 같은 종류의 디바이스들을 여러 개 구동할 수 있고, 다수의 i2c 호스트 컨트롤러에 연결되어 있어도 가능합니다.
감사합니다.
probe 2번 호출 시 i2c_client 파라미터에 각 device가 1개씩 등록 되는데 2개의 device를 한 i2c_client에 사용하려면 쉬운 방법이 있을까요?
slave addr이 같고, master가 달라서 dummy_device나 i2c_new_ancillary_device()로 i2c_client에 2개의 device가 등록이 안되고 있어서요.
감사합니다.
예) 다음은 두 개의 컨트롤러에 같은 주소를 사용하는 i2c 온도 센서 디바이스를 등록한 모습을 보여줍니다.
i2c0: i2c@11000 {
compatible = "marvell,armada-3700-i2c";
reg = <0x11000 0x24>;
#address-cells = <1>;
#size-cells = <0>;
clocks = <&nb_periph_clk 10>;
interrupts = ;
mrvl,i2c-fast-mode;
};
i2c1: i2c@11080 {
compatible = "marvell,armada-3700-i2c";
reg = <0x11080 0x24>;
#address-cells = <1>;
#size-cells = <0>;
clocks = <&nb_periph_clk 9>;
interrupts = ;
mrvl,i2c-fast-mode;
};
&i2c1 {
temp-sense1@48 {
compatible = "national,lm75";
reg = <0x48>;
};
};
&i2c2 {
temp-sense2@48 {
compatible = "national,lm75";
reg = <0x48>;
};
};
위의 lm75 장치의 소스는 커널 디렉토리에서 다음에 위치합니다.
drivers/hwmon/lm75.c
디바이스 트리를 사용하여 i2c 클라이언트(슬레이브) 디바이스를 이미 등록하였으므로, 해당 디바이스의 probe() 루틴에서는 i2c_new_ancillary_device()를 사용하여 두번 등록하게 하면 안됩니다.
드라이버 코드내에서 i2c_new_device()나 i2c_new_ancillary_device() 함수를 사용한 경우는 디바이스 트리가 아니라 예전 custom 방식으로 강제로 특정 i2c 디바이스를 등록할 때 사용했었습니다.
감사합니다.
문영일 드림.
많은 도움되었습니다.