serial: mctrl_gpio: enable API usage only for initialized mctrl_gpios struct
This workaround is needed for the cases, where mctrl_gpio API is used before mctrl_gpio_init() was invoked. This happens in 8250 during console initialization, as the driver sets DTR signal. Signed-off-by: Yegor Yefremov <yegorslists@googlemail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
bf5cee681e
commit
434be0ae7a
1 changed files with 18 additions and 0 deletions
|
@ -52,6 +52,9 @@ void mctrl_gpio_set(struct mctrl_gpios *gpios, unsigned int mctrl)
|
|||
int value_array[UART_GPIO_MAX];
|
||||
unsigned int count = 0;
|
||||
|
||||
if (gpios == NULL)
|
||||
return;
|
||||
|
||||
for (i = 0; i < UART_GPIO_MAX; i++)
|
||||
if (gpios->gpio[i] && mctrl_gpios_desc[i].dir_out) {
|
||||
desc_array[count] = gpios->gpio[i];
|
||||
|
@ -73,6 +76,9 @@ unsigned int mctrl_gpio_get(struct mctrl_gpios *gpios, unsigned int *mctrl)
|
|||
{
|
||||
enum mctrl_gpio_idx i;
|
||||
|
||||
if (gpios == NULL)
|
||||
return *mctrl;
|
||||
|
||||
for (i = 0; i < UART_GPIO_MAX; i++) {
|
||||
if (gpios->gpio[i] && !mctrl_gpios_desc[i].dir_out) {
|
||||
if (gpiod_get_value(gpios->gpio[i]))
|
||||
|
@ -91,6 +97,9 @@ mctrl_gpio_get_outputs(struct mctrl_gpios *gpios, unsigned int *mctrl)
|
|||
{
|
||||
enum mctrl_gpio_idx i;
|
||||
|
||||
if (gpios == NULL)
|
||||
return *mctrl;
|
||||
|
||||
for (i = 0; i < UART_GPIO_MAX; i++) {
|
||||
if (gpios->gpio[i] && mctrl_gpios_desc[i].dir_out) {
|
||||
if (gpiod_get_value(gpios->gpio[i]))
|
||||
|
@ -221,6 +230,9 @@ void mctrl_gpio_free(struct device *dev, struct mctrl_gpios *gpios)
|
|||
{
|
||||
enum mctrl_gpio_idx i;
|
||||
|
||||
if (gpios == NULL)
|
||||
return;
|
||||
|
||||
for (i = 0; i < UART_GPIO_MAX; i++) {
|
||||
if (gpios->irq[i])
|
||||
devm_free_irq(gpios->port->dev, gpios->irq[i], gpios);
|
||||
|
@ -236,6 +248,9 @@ void mctrl_gpio_enable_ms(struct mctrl_gpios *gpios)
|
|||
{
|
||||
enum mctrl_gpio_idx i;
|
||||
|
||||
if (gpios == NULL)
|
||||
return;
|
||||
|
||||
/* .enable_ms may be called multiple times */
|
||||
if (gpios->mctrl_on)
|
||||
return;
|
||||
|
@ -258,6 +273,9 @@ void mctrl_gpio_disable_ms(struct mctrl_gpios *gpios)
|
|||
{
|
||||
enum mctrl_gpio_idx i;
|
||||
|
||||
if (gpios == NULL)
|
||||
return;
|
||||
|
||||
if (!gpios->mctrl_on)
|
||||
return;
|
||||
|
||||
|
|
Loading…
Reference in a new issue