2.4 Anatop Regulator Driver
2.4.1 Introduction
Anatop 레귤레이터 드라이버는 전원 공급 레귤레이터의 저수준 컨트롤과 전압 레벨 선택을 제공한다. 이 디바이스 드라이버는 레귤레이터 코어 드라이버를 사용하여 Anatop 하드웨어 컨트롤 레지스터에 액세스하고 i.MX 6과 i.MX 7에서만 지원된다.
2.4.2 Hardware Operation
다이의 Power Management Unit은 외부 전원 인터페이스를 단순화하고 다이를 적절한 전원 방식으로 구성될 수 있도록 제작되었다. 전원 시스템은 입력 전원과 그 특성, 통합된 전원 변환과 컨트롤 요소, 최종 부하의 상호 연결과 요구 사항으로 구성된다.
7개의 LDO 레귤레이터를 사용하여, 외부 공급 장치의 수를 크게 줄였다. 백업 코인과 USB 입력을 무시 한다면, 외부 공급 장치의 수가 2개로 줄어든다. 이 외부 공급 장치의 총계에서 빠진 것은 사용하려는 메모리 인터페이스에 전원을 공급하는 데 필요한 외부 공급 장치이다. 이는 선택한 외부 메모리의 종류에 따라 달라진다. I/O 전압이 위에서 제공된 것과 다른 경우, 다른 I/O 전원 세그먼트에 전압을 공급하기 위해 다른 공급 장치가 필요할 수도 있다.
일부 레귤레이터는 바이패스될 수 있다. 그래서 외부 PMIC가 전력 수를 줄일 수 있도록 직접 전원을 공급할 수 있다(VDD_SOC, VDD_ARM와 같은).
2.4.3 Software Operation
Anatop 레귤레이터 클라이언트 드라이버는 Anatop 하드웨어 컨트롤 레지스터를 재구성하여 작업을 수행한다. 이는 필요한 레지스터 설정으로 레귤레이터 코어 API를 호출하여 수행한다.
2.4.4 Driver Features
Anatop 레귤레이터 드라이버는 레귤레이터 코어 드라이버를 기반으로 한다. 레귤레이터 컨트롤을 위해 제공되는 서비스 목록은 여기에서 찾을 수 있다.
- 모든 전압 레귤레이터의 스위치 ON/OFF
- 모든 전압 레귤레이터의 값 설정
- 모든 전압 레귤레이터의 현재 값 가져오기
2.4.5 Driver Interface Details
Anatop 레귤레이터에 대한 액세스는 레귤레이터 코어 드라이버의 API를 통해 제공된다. Anatop 레귤레이터 드라이버는 다음 레귤레이터 컨트롤을 제공한다:
- 7개의 LDO 레귤레이터
- 레귤레이터의 모든 기능은 Anatop 하드웨어 레지스터 값을 적절하게 설정하여 처리된다. 이는 Anatop 하드웨어 레지스터에 액세스하기 위해 레귤레이터 코어 API를 호출하여 수행한다.
2.4.6 Regulator APIs
레귤레이터 전원 아키텍처는 Linux 커널 내에서 전압과 전류 레귤레이터에 대해 일반적인 인터페이스를 제공하도록 디자인되었다. 클라이언트나 컨슈머 드라이버에 전압과 전류 컨트롤을 제공하고, sysfs 인터페이스로 사용자 공간 애플리케이션에 상태 정보를 제공하기 위한 것이다. 그 의도는 시스템이 레귤레이터 출력을 동적으로 컨트롤하여 전력을 절약하고 배터리 수명을 연장할 수 있도록 하는 것이다. 이는 전압 레귤레이터(전압 출력을 컨트롤할 수 있는 경우)와 전류 싱크(전류 출력을 컨트롤할 수 있는 경우)에 모두 적용된다.
자세한 내용을 얻으려면, opensource.wolfsonmicro.com/node/15(사이트 연결이 안됨)를 방문한다.
이 프레임워크에서, 대부분의 전원 작업은 다음에 있는 통합된 API 호출로 수행할 수 있다:
- regulator_get : 레귤레이터에 대한 레퍼런스를 조회하고 얻는 데 사용된다.
struct regulator *regulator_get(struct device *dev, const char *id);
- regulator_put : 레귤레이터 소스를 해제하는 데 사용된다.
void regulator_put(struct regulator *regulator, struct device *dev);
- regulator_enable : 레귤레이터 출력을 활성화하는 데 사용된다.
int regulator_enable(struct regulator *regulator);
- regulator_disable : 레귤레이터 출력을 비활성화하는 데 사용된다.
int regulator_disable(struct regulator *regulator);
- regulator_is_enabled : 레귤레이터 출력이 활성화되어 있는지 확인한다.
int regulator_is_enabled(struct regulator *regulator);
- regulator_set_voltage : 레귤레이터 출력 전압 설정에 사용된다.
int regulator_set_voltage(struct regulator *regulator, int uV);
- regulator_get_voltage : 레귤레이터 출력 전압을 가져오는 데 사용된다.
int regulator_get_voltage(struct regulator *regulator);
Linux 커널 내부의 레귤레이터 코어 소스 코드에 대한 자세한 API와 세부정보는 drivers/regulator/core.c를 참조한다.
2.4.7 Source Code Structure
Anatop 레귤레이터 드라이버는 drivers/regulator 디렉토리에 있다:
Table 9. Anatop Power Management Driver Files
File | Description |
---|---|
drivers/regulator/core.c | 레귤레이터 인터페이스 |
drivers/regulator/anatop-regulator.c | Anatop 레귤레이터 클라이언트 드라이버 |
Anatop 레귤레이터는 arch/arm/boot/dts의 각 SoC별 dts 파일에 등록되어 있다.
2.4.8 Menu Configuration Options
메뉴 규성에서 다음 모듈을 활성화한다:
- Device Drivers > Voltage and Current regulator support > Anatop Regulator Support
- System Type > Freescale i.MX on-chip ANATOP LDO regulators