tree:
git://anongit.freedesktop.org/drm/drm-misc drm-misc-next
head: baef4d56195b6d6e0f681f6eac03d8c6db011d34
commit: 27ed2b3f22ed60295c74b4ca3e855823d0e7603b [1/4] drm/bridge: ti-sn65dsi86: Export
bridge GPIOs to Linux
:::::: branch date: 4 weeks ago
:::::: commit date: 4 weeks ago
config: xtensa-randconfig-r011-20200612 (attached as .config)
compiler: xtensa-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout 27ed2b3f22ed60295c74b4ca3e855823d0e7603b
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=xtensa
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>, old ones prefixed by <<):
In file included from ./arch/xtensa/include/generated/asm/bug.h:1,
from include/linux/bug.h:5,
from include/linux/thread_info.h:12,
from arch/xtensa/include/asm/current.h:18,
from include/linux/mutex.h:14,
from include/linux/notifier.h:14,
from include/linux/clk.h:14,
from drivers/gpu/drm/bridge/ti-sn65dsi86.c:8:
drivers/gpu/drm/bridge/ti-sn65dsi86.c: In function 'tn_sn_bridge_of_xlate':
> drivers/gpu/drm/bridge/ti-sn65dsi86.c:923:41: error: 'struct
gpio_chip' has no member named 'of_gpio_n_cells'
923 | if
(WARN_ON(gpiospec->args_count < chip->of_gpio_n_cells))
| ^~
include/asm-generic/bug.h:113:25: note: in definition of macro 'WARN_ON'
113 | int __ret_warn_on = !!(condition); | ^~~~~~~~~
drivers/gpu/drm/bridge/ti-sn65dsi86.c: In function 'ti_sn_bridge_gpio_set':
drivers/gpu/drm/bridge/ti-sn65dsi86.c:978:6: warning: variable 'ret' set but not
used [-Wunused-but-set-variable]
978 | int ret;
| ^~~
drivers/gpu/drm/bridge/ti-sn65dsi86.c: In function 'ti_sn_setup_gpio_controller':
> drivers/gpu/drm/bridge/ti-sn65dsi86.c:1067:14: error: 'struct
gpio_chip' has no member named 'of_xlate'
1067 |
pdata->gchip.of_xlate = tn_sn_bridge_of_xlate;
| ^
drivers/gpu/drm/bridge/ti-sn65dsi86.c:1068:14: error: 'struct gpio_chip' has no
member named 'of_gpio_n_cells'
1068 | pdata->gchip.of_gpio_n_cells = 2;
| ^
git remote add drm-drm-misc
git://anongit.freedesktop.org/drm/drm-misc
git remote update drm-drm-misc
git checkout 27ed2b3f22ed60295c74b4ca3e855823d0e7603b
vim +923 drivers/gpu/drm/bridge/ti-sn65dsi86.c
a095f15c00e278 Sandeep Panda 2018-07-20 918
27ed2b3f22ed60 Douglas Anderson 2020-05-07 919 static int tn_sn_bridge_of_xlate(struct
gpio_chip *chip,
27ed2b3f22ed60 Douglas Anderson 2020-05-07 920 const struct of_phandle_args
*gpiospec,
27ed2b3f22ed60 Douglas Anderson 2020-05-07 921 u32 *flags)
27ed2b3f22ed60 Douglas Anderson 2020-05-07 922 {
27ed2b3f22ed60 Douglas Anderson 2020-05-07 @923 if (WARN_ON(gpiospec->args_count
< chip->of_gpio_n_cells))
27ed2b3f22ed60 Douglas Anderson 2020-05-07 924 return -EINVAL;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 925
27ed2b3f22ed60 Douglas Anderson 2020-05-07 926 if (gpiospec->args[0] >
chip->ngpio || gpiospec->args[0] < 1)
27ed2b3f22ed60 Douglas Anderson 2020-05-07 927 return -EINVAL;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 928
27ed2b3f22ed60 Douglas Anderson 2020-05-07 929 if (flags)
27ed2b3f22ed60 Douglas Anderson 2020-05-07 930 *flags = gpiospec->args[1];
27ed2b3f22ed60 Douglas Anderson 2020-05-07 931
27ed2b3f22ed60 Douglas Anderson 2020-05-07 932 return gpiospec->args[0] -
SN_GPIO_PHYSICAL_OFFSET;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 933 }
27ed2b3f22ed60 Douglas Anderson 2020-05-07 934
27ed2b3f22ed60 Douglas Anderson 2020-05-07 935 static int
ti_sn_bridge_gpio_get_direction(struct gpio_chip *chip,
27ed2b3f22ed60 Douglas Anderson 2020-05-07 936 unsigned int offset)
27ed2b3f22ed60 Douglas Anderson 2020-05-07 937 {
27ed2b3f22ed60 Douglas Anderson 2020-05-07 938 struct ti_sn_bridge *pdata =
gpiochip_get_data(chip);
27ed2b3f22ed60 Douglas Anderson 2020-05-07 939
27ed2b3f22ed60 Douglas Anderson 2020-05-07 940 /*
27ed2b3f22ed60 Douglas Anderson 2020-05-07 941 * We already have to keep track of the
direction because we use
27ed2b3f22ed60 Douglas Anderson 2020-05-07 942 * that to figure out whether we've
powered the device. We can
27ed2b3f22ed60 Douglas Anderson 2020-05-07 943 * just return that rather than (maybe)
powering up the device
27ed2b3f22ed60 Douglas Anderson 2020-05-07 944 * to ask its direction.
27ed2b3f22ed60 Douglas Anderson 2020-05-07 945 */
27ed2b3f22ed60 Douglas Anderson 2020-05-07 946 return test_bit(offset,
pdata->gchip_output) ?
27ed2b3f22ed60 Douglas Anderson 2020-05-07 947 GPIO_LINE_DIRECTION_OUT :
GPIO_LINE_DIRECTION_IN;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 948 }
27ed2b3f22ed60 Douglas Anderson 2020-05-07 949
27ed2b3f22ed60 Douglas Anderson 2020-05-07 950 static int ti_sn_bridge_gpio_get(struct
gpio_chip *chip, unsigned int offset)
27ed2b3f22ed60 Douglas Anderson 2020-05-07 951 {
27ed2b3f22ed60 Douglas Anderson 2020-05-07 952 struct ti_sn_bridge *pdata =
gpiochip_get_data(chip);
27ed2b3f22ed60 Douglas Anderson 2020-05-07 953 unsigned int val;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 954 int ret;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 955
27ed2b3f22ed60 Douglas Anderson 2020-05-07 956 /*
27ed2b3f22ed60 Douglas Anderson 2020-05-07 957 * When the pin is an input we
don't forcibly keep the bridge
27ed2b3f22ed60 Douglas Anderson 2020-05-07 958 * powered--we just power it on to read
the pin. NOTE: part of
27ed2b3f22ed60 Douglas Anderson 2020-05-07 959 * the reason this works is that the
bridge defaults (when
27ed2b3f22ed60 Douglas Anderson 2020-05-07 960 * powered back on) to all 4 GPIOs
being configured as GPIO input.
27ed2b3f22ed60 Douglas Anderson 2020-05-07 961 * Also note that if something else is
keeping the chip powered the
27ed2b3f22ed60 Douglas Anderson 2020-05-07 962 * pm_runtime functions are lightweight
increments of a refcount.
27ed2b3f22ed60 Douglas Anderson 2020-05-07 963 */
27ed2b3f22ed60 Douglas Anderson 2020-05-07 964 pm_runtime_get_sync(pdata->dev);
27ed2b3f22ed60 Douglas Anderson 2020-05-07 965 ret = regmap_read(pdata->regmap,
SN_GPIO_IO_REG, &val);
27ed2b3f22ed60 Douglas Anderson 2020-05-07 966 pm_runtime_put(pdata->dev);
27ed2b3f22ed60 Douglas Anderson 2020-05-07 967
27ed2b3f22ed60 Douglas Anderson 2020-05-07 968 if (ret)
27ed2b3f22ed60 Douglas Anderson 2020-05-07 969 return ret;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 970
27ed2b3f22ed60 Douglas Anderson 2020-05-07 971 return !!(val &
BIT(SN_GPIO_INPUT_SHIFT + offset));
27ed2b3f22ed60 Douglas Anderson 2020-05-07 972 }
27ed2b3f22ed60 Douglas Anderson 2020-05-07 973
27ed2b3f22ed60 Douglas Anderson 2020-05-07 974 static void ti_sn_bridge_gpio_set(struct
gpio_chip *chip, unsigned int offset,
27ed2b3f22ed60 Douglas Anderson 2020-05-07 975 int val)
27ed2b3f22ed60 Douglas Anderson 2020-05-07 976 {
27ed2b3f22ed60 Douglas Anderson 2020-05-07 977 struct ti_sn_bridge *pdata =
gpiochip_get_data(chip);
27ed2b3f22ed60 Douglas Anderson 2020-05-07 978 int ret;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 979
27ed2b3f22ed60 Douglas Anderson 2020-05-07 980 if (!test_bit(offset,
pdata->gchip_output)) {
27ed2b3f22ed60 Douglas Anderson 2020-05-07 981 dev_err(pdata->dev, "Ignoring
GPIO set while input\n");
27ed2b3f22ed60 Douglas Anderson 2020-05-07 982 return;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 983 }
27ed2b3f22ed60 Douglas Anderson 2020-05-07 984
27ed2b3f22ed60 Douglas Anderson 2020-05-07 985 val &= 1;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 986 ret =
regmap_update_bits(pdata->regmap, SN_GPIO_IO_REG,
27ed2b3f22ed60 Douglas Anderson 2020-05-07 987 BIT(SN_GPIO_OUTPUT_SHIFT +
offset),
27ed2b3f22ed60 Douglas Anderson 2020-05-07 988 val << (SN_GPIO_OUTPUT_SHIFT
+ offset));
27ed2b3f22ed60 Douglas Anderson 2020-05-07 989 }
27ed2b3f22ed60 Douglas Anderson 2020-05-07 990
27ed2b3f22ed60 Douglas Anderson 2020-05-07 991 static int
ti_sn_bridge_gpio_direction_input(struct gpio_chip *chip,
27ed2b3f22ed60 Douglas Anderson 2020-05-07 992 unsigned int offset)
27ed2b3f22ed60 Douglas Anderson 2020-05-07 993 {
27ed2b3f22ed60 Douglas Anderson 2020-05-07 994 struct ti_sn_bridge *pdata =
gpiochip_get_data(chip);
27ed2b3f22ed60 Douglas Anderson 2020-05-07 995 int shift = offset * 2;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 996 int ret;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 997
27ed2b3f22ed60 Douglas Anderson 2020-05-07 998 if (!test_and_clear_bit(offset,
pdata->gchip_output))
27ed2b3f22ed60 Douglas Anderson 2020-05-07 999 return 0;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1000
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1001 ret =
regmap_update_bits(pdata->regmap, SN_GPIO_CTRL_REG,
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1002 SN_GPIO_MUX_MASK << shift,
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1003 SN_GPIO_MUX_INPUT << shift);
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1004 if (ret) {
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1005 set_bit(offset,
pdata->gchip_output);
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1006 return ret;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1007 }
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1008
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1009 /*
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1010 * NOTE: if nobody else is powering the
device this may fully power
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1011 * it off and when it comes back it
will have lost all state, but
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1012 * that's OK because the default is
input and we're now an input.
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1013 */
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1014 pm_runtime_put(pdata->dev);
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1015
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1016 return 0;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1017 }
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1018
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1019 static int
ti_sn_bridge_gpio_direction_output(struct gpio_chip *chip,
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1020 unsigned int offset, int
val)
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1021 {
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1022 struct ti_sn_bridge *pdata =
gpiochip_get_data(chip);
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1023 int shift = offset * 2;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1024 int ret;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1025
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1026 if (test_and_set_bit(offset,
pdata->gchip_output))
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1027 return 0;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1028
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1029 pm_runtime_get_sync(pdata->dev);
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1030
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1031 /* Set value first to avoid glitching
*/
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1032 ti_sn_bridge_gpio_set(chip, offset,
val);
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1033
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1034 /* Set direction */
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1035 ret =
regmap_update_bits(pdata->regmap, SN_GPIO_CTRL_REG,
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1036 SN_GPIO_MUX_MASK << shift,
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1037 SN_GPIO_MUX_OUTPUT <<
shift);
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1038 if (ret) {
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1039 clear_bit(offset,
pdata->gchip_output);
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1040 pm_runtime_put(pdata->dev);
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1041 }
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1042
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1043 return ret;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1044 }
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1045
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1046 static void
ti_sn_bridge_gpio_free(struct gpio_chip *chip, unsigned int offset)
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1047 {
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1048 /* We won't keep pm_runtime if
we're input, so switch there on free */
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1049 ti_sn_bridge_gpio_direction_input(chip,
offset);
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1050 }
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1051
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1052 static const char * const
ti_sn_bridge_gpio_names[SN_NUM_GPIOS] = {
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1053 "GPIO1", "GPIO2",
"GPIO3", "GPIO4"
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1054 };
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1055
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1056 static int
ti_sn_setup_gpio_controller(struct ti_sn_bridge *pdata)
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1057 {
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1058 int ret;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1059
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1060 /* Only init if someone is going to use
us as a GPIO controller */
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1061 if
(!of_property_read_bool(pdata->dev->of_node, "gpio-controller"))
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1062 return 0;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1063
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1064 pdata->gchip.label =
dev_name(pdata->dev);
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1065 pdata->gchip.parent =
pdata->dev;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1066 pdata->gchip.owner = THIS_MODULE;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 @1067 pdata->gchip.of_xlate =
tn_sn_bridge_of_xlate;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1068 pdata->gchip.of_gpio_n_cells = 2;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1069 pdata->gchip.free =
ti_sn_bridge_gpio_free;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1070 pdata->gchip.get_direction =
ti_sn_bridge_gpio_get_direction;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1071 pdata->gchip.direction_input =
ti_sn_bridge_gpio_direction_input;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1072 pdata->gchip.direction_output =
ti_sn_bridge_gpio_direction_output;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1073 pdata->gchip.get =
ti_sn_bridge_gpio_get;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1074 pdata->gchip.set =
ti_sn_bridge_gpio_set;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1075 pdata->gchip.can_sleep = true;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1076 pdata->gchip.names =
ti_sn_bridge_gpio_names;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1077 pdata->gchip.ngpio = SN_NUM_GPIOS;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1078 pdata->gchip.base = -1;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1079 ret =
devm_gpiochip_add_data(pdata->dev, &pdata->gchip, pdata);
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1080 if (ret)
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1081 dev_err(pdata->dev, "can't
add gpio chip\n");
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1082
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1083 return ret;
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1084 }
27ed2b3f22ed60 Douglas Anderson 2020-05-07 1085
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
_______________________________________________
kbuild mailing list -- kbuild(a)lists.01.org
To unsubscribe send an email to kbuild-leave(a)lists.01.org