cregit-Linux how code gets into the kernel

Release 4.16 drivers/pinctrl/zte/pinctrl-zx.h

/*
 * Copyright (C) 2017 Sanechips Technology Co., Ltd.
 * Copyright 2017 Linaro Ltd.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#ifndef __PINCTRL_ZX_H

#define __PINCTRL_ZX_H

/**
 * struct zx_mux_desc - hardware mux descriptor
 * @name: mux function name
 * @muxval: mux register bit value
 */

struct zx_mux_desc {
	
const char *name;
	
u8 muxval;
};

/**
 * struct zx_pin_data - hardware per-pin data
 * @aon_pin: whether it's an AON pin
 * @offset: register offset within TOP pinmux controller
 * @bitpos: bit position within TOP pinmux register
 * @width: bit width within TOP pinmux register
 * @coffset: pinconf register offset within AON controller
 * @cbitpos: pinconf bit position within AON register
 * @muxes: available mux function names and corresponding register values
 *
 * Unlike TOP pinmux and AON pinconf registers which are arranged pretty
 * arbitrarily, AON pinmux register bits are well organized per pin id, and
 * each pin occupies two bits, so that we can calculate the AON register offset
 * and bit position from pin id.  Thus, we only need to define TOP pinmux and
 * AON pinconf register data for the pin.
 */

struct zx_pin_data {
	
bool aon_pin;
	
u16 offset;
	
u16 bitpos;
	
u16 width;
	
u16 coffset;
	
u16 cbitpos;
	
struct zx_mux_desc *muxes;
};


struct zx_pinctrl_soc_info {
	
const struct pinctrl_pin_desc *pins;
	
unsigned int npins;
};


#define TOP_PIN(pin, off, bp, wd, coff, cbp, ...) {               \
        .number = pin,                                          \
        .name = #pin,                                           \
        .drv_data = &(struct zx_pin_data) {                     \
                .aon_pin = false,                               \
                .offset = off,                                  \
                .bitpos = bp,                                   \
                .width = wd,                                    \
                .coffset = coff,                                \
                .cbitpos = cbp,                                 \
                .muxes = (struct zx_mux_desc[]) {               \
                         __VA_ARGS__, { } },                    \
        },                                                      \
}


#define AON_PIN(pin, off, bp, wd, coff, cbp, ...) {               \
        .number = pin,                                          \
        .name = #pin,                                           \
        .drv_data = &(struct zx_pin_data) {                     \
                .aon_pin = true,                                \
                .offset = off,                                  \
                .bitpos = bp,                                   \
                .width = wd,                                    \
                .coffset = coff,                                \
                .cbitpos = cbp,                                 \
                .muxes = (struct zx_mux_desc[]) {               \
                         __VA_ARGS__, { } },                    \
        },                                                      \
}


#define ZX_RESERVED(pin) PINCTRL_PIN(pin, #pin)


#define TOP_MUX(_val, _name) {                                       \
        .name = _name,                                          \
        .muxval = _val,                                         \
}

/*
 * When the flag is set, it's a mux configuration for an AON pin that sits in
 * AON register.  Otherwise, it's one for AON pin but sitting in TOP register.
 */

#define AON_MUX_FLAG BIT(7)


#define AON_MUX(_val, _name) {                                       \
        .name = _name,                                          \
        .muxval = _val | AON_MUX_FLAG,                          \
}

int zx_pinctrl_init(struct platform_device *pdev,
		    struct zx_pinctrl_soc_info *info);

#endif /* __PINCTRL_ZX_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
Shawn Guo150100.00%1100.00%
Total150100.00%1100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.