aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCousson, Benoit <b-cousson@ti.com>2012-02-28 12:22:12 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-03-08 13:56:44 -0500
commita5f43138da9beddc46b00ec31d167143a7176683 (patch)
tree077fe6f2ed1070ba9c82f268777553822d930074
parent079c9534a96da9a85a2a2f9715851050fbfbf749 (diff)
tty: serial: OMAP: Fix oops due to NULL pdata in DT boot
The following commit: be4b0281956c5cae4f63f31f11d07625a6988766 (tty: serial: OMAP: block idle while the UART is transferring data in PIO mode), is introducing an oops if OMAP is booted using device tree blob because the pdata will not be initialized. Check if pdata is set before de-referencing it. Signed-off-by: Benoit Cousson <b-cousson@ti.com> Reviewed-by: Paul Walmsley <paul@pwsan.com> Cc: stable <stable@vger.kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/tty/serial/omap-serial.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
index f80904145fd4..0121486ac4fa 100644
--- a/drivers/tty/serial/omap-serial.c
+++ b/drivers/tty/serial/omap-serial.c
@@ -159,7 +159,7 @@ static void serial_omap_stop_tx(struct uart_port *port)
159 serial_out(up, UART_IER, up->ier); 159 serial_out(up, UART_IER, up->ier);
160 } 160 }
161 161
162 if (!up->use_dma && pdata->set_forceidle) 162 if (!up->use_dma && pdata && pdata->set_forceidle)
163 pdata->set_forceidle(up->pdev); 163 pdata->set_forceidle(up->pdev);
164 164
165 pm_runtime_mark_last_busy(&up->pdev->dev); 165 pm_runtime_mark_last_busy(&up->pdev->dev);
@@ -298,7 +298,7 @@ static void serial_omap_start_tx(struct uart_port *port)
298 if (!up->use_dma) { 298 if (!up->use_dma) {
299 pm_runtime_get_sync(&up->pdev->dev); 299 pm_runtime_get_sync(&up->pdev->dev);
300 serial_omap_enable_ier_thri(up); 300 serial_omap_enable_ier_thri(up);
301 if (pdata->set_noidle) 301 if (pdata && pdata->set_noidle)
302 pdata->set_noidle(up->pdev); 302 pdata->set_noidle(up->pdev);
303 pm_runtime_mark_last_busy(&up->pdev->dev); 303 pm_runtime_mark_last_busy(&up->pdev->dev);
304 pm_runtime_put_autosuspend(&up->pdev->dev); 304 pm_runtime_put_autosuspend(&up->pdev->dev);
@@ -1613,7 +1613,7 @@ static int serial_omap_runtime_resume(struct device *dev)
1613 struct uart_omap_port *up = dev_get_drvdata(dev); 1613 struct uart_omap_port *up = dev_get_drvdata(dev);
1614 struct omap_uart_port_info *pdata = dev->platform_data; 1614 struct omap_uart_port_info *pdata = dev->platform_data;
1615 1615
1616 if (up) { 1616 if (up && pdata) {
1617 if (pdata->get_context_loss_count) { 1617 if (pdata->get_context_loss_count) {
1618 u32 loss_cnt = pdata->get_context_loss_count(dev); 1618 u32 loss_cnt = pdata->get_context_loss_count(dev);
1619 1619