mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-08-23 07:31:27 +02:00
Most platforms have a handful of "special" GPIOs, like the MMC clock/data lanes, UFS reset, etc. These don't follow the usual naming scheme of "gpioX" and also have unique capabilities and registers. We can get away without supporting them all for now, but DT compatibility is still an issue. Add support for allowing these to be specified after the other pins, and make all pinmux/pinconf calls for them nop. Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org> Reviewed-by: Sumit Garg <sumit.garg@linaro.org> Tested-by: Sumit Garg <sumit.garg@linaro.org> #qcs404 Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
36 lines
759 B
C
36 lines
759 B
C
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
/*
|
|
* Qualcomm common pin control data.
|
|
*
|
|
* Copyright (C) 2023 Linaro Ltd.
|
|
*/
|
|
#ifndef _QCOM_GPIO_H_
|
|
#define _QCOM_GPIO_H_
|
|
|
|
#include <asm/types.h>
|
|
#include <stdbool.h>
|
|
|
|
struct msm_pin_data {
|
|
int pin_count;
|
|
const unsigned int *pin_offsets;
|
|
/* Index of first special pin, these are ignored for now */
|
|
unsigned int special_pins_start;
|
|
};
|
|
|
|
static inline u32 qcom_pin_offset(const unsigned int *offs, unsigned int selector)
|
|
{
|
|
u32 out = (selector * 0x1000);
|
|
|
|
if (offs)
|
|
return out + offs[selector];
|
|
|
|
return out;
|
|
}
|
|
|
|
static inline bool qcom_is_special_pin(const struct msm_pin_data *pindata, unsigned int pin)
|
|
{
|
|
return pindata->special_pins_start && pin >= pindata->special_pins_start;
|
|
}
|
|
|
|
#endif /* _QCOM_GPIO_H_ */
|