Q&A 게시판

리눅스 커널에 대한 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를 동시에 키는 동작입니다.
전체 5
  • 2021-05-12 08:02
    안녕하세요? 문영일입니다.

    당연히 가능합니다. 많은 시스템들이 하나의 i2c 호스트 컨트롤러 드라이버 코드를 사용하여 다수의 i2c 호스트 컨트롤러를 다루고 있습니다.
    또한 i2c 슬레이브 디바이스들도 역시 하나의 코드로 같은 종류의 디바이스들을 여러 개 구동할 수 있고, 다수의 i2c 호스트 컨트롤러에 연결되어 있어도 가능합니다.

    감사합니다.

    • 2021-05-12 15:54
      답변 감사합니다. 1개의 드라이버에서 DT로 2개의 probe 호출하여 연결되는 부분 확인 하였습니다.

  • 2021-05-12 16:34
    안녕하세요. 추가 문의가 있어서요.
    probe 2번 호출 시 i2c_client 파라미터에 각 device가 1개씩 등록 되는데 2개의 device를 한 i2c_client에 사용하려면 쉬운 방법이 있을까요?
    slave addr이 같고, master가 달라서 dummy_device나 i2c_new_ancillary_device()로 i2c_client에 2개의 device가 등록이 안되고 있어서요.
    감사합니다.

  • 2021-05-13 14:18
    두 개의 i2c 호스트 컨트롤러(마스터 i2c 어댑터)에 각각 같은 주소를 같는 i2c 디바이스를 사용할 때 특별히 주의해야 할 것은 없습니다.

    예) 다음은 두 개의 컨트롤러에 같은 주소를 사용하는 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 디바이스를 등록할 때 사용했었습니다.

    감사합니다.

    문영일 드림.

    • 2021-05-14 10:10
      안녕하세요. 확인 감사드립니다. 디바이스 트리일 경우 주의점은 몰랐었는데 확인해 주셔서 너무 감사합니다. 공부좀 더 해봐야겠네요.
      많은 도움되었습니다.