2016-12-21 6 views
0

Я хочу попытаться использовать PWM в модуле ядра Linux для моего Rasperry Pi. Я успешно включил PWM через интерфейс SYSFS. Для использования ШИМ модулей ядра документации говорится:Пример использования pwm_get() в ядре linux

Новые пользователи должны использовать функцию pwm_get() и передать ей потребительское устройство или имя потребителя. pwm_put() используется для освобождения устройства PWM . Управляемые варианты этих функций, devm_pwm_get() и devm_pwm_put() также существуют.

функция pwm_get выглядит следующим образом:

/** 
* pwm_get() - look up and request a PWM device 
* @dev: device for PWM consumer 
* @con_id: consumer name 
.... 
*/ 
struct pwm_device *pwm_get(struct device *dev, const char *con_id) 

Где я могу найти Дев и con_id? Я подозреваю, что они должны быть определены в дереве устройств, но это всего лишь подозрение.

+0

Используйте [LXR] (http://lxr.free-electrons.com/) для поиска ядра для любых идентификаторов или строк, которые вы ищете. – skrrgwasme

+0

Вы должны предоставить ресурсы через a) дерево устройств или b) ACPI (однако, это будет сделано иначе) или c) статические таблицы поиска. – 0andriy

ответ

1

Один пример pwm_get() доступен в драйвере Intel PWM backlight panel.
Здесь он используется для получения источника PWM по его названию.

/* Get the PWM chip for backlight control */ 
panel->backlight.pwm = pwm_get(dev->dev, "pwm_backlight"); 

сам поставщик ШИМ определяется here ...

/* PWM consumed by the Intel GFX */ 
static struct pwm_lookup crc_pwm_lookup[] = { 
     PWM_LOOKUP("crystal_cove_pwm", 0, "0000:00:02.0", "pwm_backlight", 0, PWM_POLARITY_NORMAL), 
}; 

... и инициализируется here.

/* Add lookup table for crc-pwm */ 
pwm_add_table(crc_pwm_lookup, ARRAY_SIZE(crc_pwm_lookup)); 

pwm-beeper является еще одним примером pwm_get().

beeper->pwm = pwm_get(&pdev->dev, NULL); 

Соответствующая запись в дереве устройств присутствует here.

buzzer { 
     compatible = "pwm-beeper"; 
     pwms = <&pwm 0 1000000 0>; 
     pinctrl-names = "default"; 
     pinctrl-0 = <&pwm0_out>; 
}; 

inline documentation of pwm_get() описывает как способы его можно использовать.

/** 
* pwm_get() - look up and request a PWM device 
* @dev: device for PWM consumer 
* @con_id: consumer name 
* 
* Lookup is first attempted using DT. If the device was not instantiated from 
* a device tree, a PWM chip and a relative index is looked up via a table 
* supplied by board setup code (see pwm_add_table()). 
* 
* Once a PWM chip has been found the specified PWM device will be requested 
* and is ready to be used. 
* 
* Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded 
* error code on failure. 
*/ 
Смежные вопросы