18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * TI/National Semiconductor LP3943 Device 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright 2013 Texas Instruments 68c2ecf20Sopenharmony_ci * 78c2ecf20Sopenharmony_ci * Author: Milo Kim <milo.kim@ti.com> 88c2ecf20Sopenharmony_ci */ 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#ifndef __MFD_LP3943_H__ 118c2ecf20Sopenharmony_ci#define __MFD_LP3943_H__ 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci#include <linux/gpio.h> 148c2ecf20Sopenharmony_ci#include <linux/pwm.h> 158c2ecf20Sopenharmony_ci#include <linux/regmap.h> 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ci/* Registers */ 188c2ecf20Sopenharmony_ci#define LP3943_REG_GPIO_A 0x00 198c2ecf20Sopenharmony_ci#define LP3943_REG_GPIO_B 0x01 208c2ecf20Sopenharmony_ci#define LP3943_REG_PRESCALE0 0x02 218c2ecf20Sopenharmony_ci#define LP3943_REG_PWM0 0x03 228c2ecf20Sopenharmony_ci#define LP3943_REG_PRESCALE1 0x04 238c2ecf20Sopenharmony_ci#define LP3943_REG_PWM1 0x05 248c2ecf20Sopenharmony_ci#define LP3943_REG_MUX0 0x06 258c2ecf20Sopenharmony_ci#define LP3943_REG_MUX1 0x07 268c2ecf20Sopenharmony_ci#define LP3943_REG_MUX2 0x08 278c2ecf20Sopenharmony_ci#define LP3943_REG_MUX3 0x09 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci/* Bit description for LP3943_REG_MUX0 ~ 3 */ 308c2ecf20Sopenharmony_ci#define LP3943_GPIO_IN 0x00 318c2ecf20Sopenharmony_ci#define LP3943_GPIO_OUT_HIGH 0x00 328c2ecf20Sopenharmony_ci#define LP3943_GPIO_OUT_LOW 0x01 338c2ecf20Sopenharmony_ci#define LP3943_DIM_PWM0 0x02 348c2ecf20Sopenharmony_ci#define LP3943_DIM_PWM1 0x03 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_ci#define LP3943_NUM_PWMS 2 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_cienum lp3943_pwm_output { 398c2ecf20Sopenharmony_ci LP3943_PWM_OUT0, 408c2ecf20Sopenharmony_ci LP3943_PWM_OUT1, 418c2ecf20Sopenharmony_ci LP3943_PWM_OUT2, 428c2ecf20Sopenharmony_ci LP3943_PWM_OUT3, 438c2ecf20Sopenharmony_ci LP3943_PWM_OUT4, 448c2ecf20Sopenharmony_ci LP3943_PWM_OUT5, 458c2ecf20Sopenharmony_ci LP3943_PWM_OUT6, 468c2ecf20Sopenharmony_ci LP3943_PWM_OUT7, 478c2ecf20Sopenharmony_ci LP3943_PWM_OUT8, 488c2ecf20Sopenharmony_ci LP3943_PWM_OUT9, 498c2ecf20Sopenharmony_ci LP3943_PWM_OUT10, 508c2ecf20Sopenharmony_ci LP3943_PWM_OUT11, 518c2ecf20Sopenharmony_ci LP3943_PWM_OUT12, 528c2ecf20Sopenharmony_ci LP3943_PWM_OUT13, 538c2ecf20Sopenharmony_ci LP3943_PWM_OUT14, 548c2ecf20Sopenharmony_ci LP3943_PWM_OUT15, 558c2ecf20Sopenharmony_ci}; 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_ci/* 588c2ecf20Sopenharmony_ci * struct lp3943_pwm_map 598c2ecf20Sopenharmony_ci * @output: Output pins which are mapped to each PWM channel 608c2ecf20Sopenharmony_ci * @num_outputs: Number of outputs 618c2ecf20Sopenharmony_ci */ 628c2ecf20Sopenharmony_cistruct lp3943_pwm_map { 638c2ecf20Sopenharmony_ci enum lp3943_pwm_output *output; 648c2ecf20Sopenharmony_ci int num_outputs; 658c2ecf20Sopenharmony_ci}; 668c2ecf20Sopenharmony_ci 678c2ecf20Sopenharmony_ci/* 688c2ecf20Sopenharmony_ci * struct lp3943_platform_data 698c2ecf20Sopenharmony_ci * @pwms: Output channel definitions for PWM channel 0 and 1 708c2ecf20Sopenharmony_ci */ 718c2ecf20Sopenharmony_cistruct lp3943_platform_data { 728c2ecf20Sopenharmony_ci struct lp3943_pwm_map *pwms[LP3943_NUM_PWMS]; 738c2ecf20Sopenharmony_ci}; 748c2ecf20Sopenharmony_ci 758c2ecf20Sopenharmony_ci/* 768c2ecf20Sopenharmony_ci * struct lp3943_reg_cfg 778c2ecf20Sopenharmony_ci * @reg: Register address 788c2ecf20Sopenharmony_ci * @mask: Register bit mask to be updated 798c2ecf20Sopenharmony_ci * @shift: Register bit shift 808c2ecf20Sopenharmony_ci */ 818c2ecf20Sopenharmony_cistruct lp3943_reg_cfg { 828c2ecf20Sopenharmony_ci u8 reg; 838c2ecf20Sopenharmony_ci u8 mask; 848c2ecf20Sopenharmony_ci u8 shift; 858c2ecf20Sopenharmony_ci}; 868c2ecf20Sopenharmony_ci 878c2ecf20Sopenharmony_ci/* 888c2ecf20Sopenharmony_ci * struct lp3943 898c2ecf20Sopenharmony_ci * @dev: Parent device pointer 908c2ecf20Sopenharmony_ci * @regmap: Used for I2C communication on accessing registers 918c2ecf20Sopenharmony_ci * @pdata: LP3943 platform specific data 928c2ecf20Sopenharmony_ci * @mux_cfg: Register configuration for pin MUX 938c2ecf20Sopenharmony_ci * @pin_used: Bit mask for output pin used. 948c2ecf20Sopenharmony_ci * This bitmask is used for pin assignment management. 958c2ecf20Sopenharmony_ci * 1 = pin used, 0 = available. 968c2ecf20Sopenharmony_ci * Only LSB 16 bits are used, but it is unsigned long type 978c2ecf20Sopenharmony_ci * for atomic bitwise operations. 988c2ecf20Sopenharmony_ci */ 998c2ecf20Sopenharmony_cistruct lp3943 { 1008c2ecf20Sopenharmony_ci struct device *dev; 1018c2ecf20Sopenharmony_ci struct regmap *regmap; 1028c2ecf20Sopenharmony_ci struct lp3943_platform_data *pdata; 1038c2ecf20Sopenharmony_ci const struct lp3943_reg_cfg *mux_cfg; 1048c2ecf20Sopenharmony_ci unsigned long pin_used; 1058c2ecf20Sopenharmony_ci}; 1068c2ecf20Sopenharmony_ci 1078c2ecf20Sopenharmony_ciint lp3943_read_byte(struct lp3943 *lp3943, u8 reg, u8 *read); 1088c2ecf20Sopenharmony_ciint lp3943_write_byte(struct lp3943 *lp3943, u8 reg, u8 data); 1098c2ecf20Sopenharmony_ciint lp3943_update_bits(struct lp3943 *lp3943, u8 reg, u8 mask, u8 data); 1108c2ecf20Sopenharmony_ci#endif 111