/* * (C) Copyright 2014 - 2015 Xilinx, Inc. * Michal Simek * * SPDX-License-Identifier: GPL-2.0+ */ #include #include #include #include #include #include /* * zynq_slcr_mio_get_status - Get the status of MIO peripheral. * * @peri_name: Name of the peripheral for checking MIO status * @get_pins: Pointer to array of get pin for this peripheral * @num_pins: Number of pins for this peripheral * @mask: Mask value * @check_val: Required check value to get the status of periph */ struct zynq_slcr_mio_get_status { const char *peri_name; const int *get_pins; int num_pins; u32 mask; u32 check_val; }; static const struct zynq_slcr_mio_get_status mio_periphs[] = { }; /* * zynq_slcr_get_mio_pin_status - Get the MIO pin status of peripheral. * * @periph: Name of the peripheral * * Returns count to indicate the number of pins configured for the * given @periph. */ int zynq_slcr_get_mio_pin_status(const char *periph) { const struct zynq_slcr_mio_get_status *mio_ptr; int val, i, j; int mio = 0; for (i = 0; i < ARRAY_SIZE(mio_periphs); i++) { if (strcmp(periph, mio_periphs[i].peri_name) == 0) { mio_ptr = &mio_periphs[i]; for (j = 0; j < mio_ptr->num_pins; j++) { val = readl(&slcr_base->mio_pin [mio_ptr->get_pins[j]]); if ((val & mio_ptr->mask) == mio_ptr->check_val) mio++; } break; } } return mio; }