projects
/
firefly-linux-kernel-4.4.55.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
UPSTREAM: drm/edid: Extract SADs properly from multiple audio data blocks
[firefly-linux-kernel-4.4.55.git]
/
drivers
/
tty
/
goldfish.c
diff --git
a/drivers/tty/goldfish.c
b/drivers/tty/goldfish.c
index 0f82c0b146f6d8eb0bdea4a92e4c8a4d72dd3332..1e332855b93388ded9051ec74f644fc3bd8d8857 100644
(file)
--- a/
drivers/tty/goldfish.c
+++ b/
drivers/tty/goldfish.c
@@
-68,8
+68,7
@@
static void goldfish_tty_do_write(int line, const char *buf, unsigned count)
static irqreturn_t goldfish_tty_interrupt(int irq, void *dev_id)
{
static irqreturn_t goldfish_tty_interrupt(int irq, void *dev_id)
{
- struct platform_device *pdev = dev_id;
- struct goldfish_tty *qtty = &goldfish_ttys[pdev->id];
+ struct goldfish_tty *qtty = dev_id;
void __iomem *base = qtty->base;
unsigned long irq_flags;
unsigned char *buf;
void __iomem *base = qtty->base;
unsigned long irq_flags;
unsigned char *buf;
@@
-233,6
+232,7
@@
static int goldfish_tty_probe(struct platform_device *pdev)
struct device *ttydev;
void __iomem *base;
u32 irq;
struct device *ttydev;
void __iomem *base;
u32 irq;
+ unsigned int line;
r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (r == NULL)
r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (r == NULL)
@@
-248,10
+248,16
@@
static int goldfish_tty_probe(struct platform_device *pdev)
irq = r->start;
irq = r->start;
- if (pdev->id >= goldfish_tty_line_count)
- goto err_unmap;
-
mutex_lock(&goldfish_tty_lock);
mutex_lock(&goldfish_tty_lock);
+
+ if (pdev->id == PLATFORM_DEVID_NONE)
+ line = goldfish_tty_current_line_count;
+ else
+ line = pdev->id;
+
+ if (line >= goldfish_tty_line_count)
+ goto err_create_driver_failed;
+
if (goldfish_tty_current_line_count == 0) {
ret = goldfish_tty_create_driver();
if (ret)
if (goldfish_tty_current_line_count == 0) {
ret = goldfish_tty_create_driver();
if (ret)
@@
-259,7
+265,7
@@
static int goldfish_tty_probe(struct platform_device *pdev)
}
goldfish_tty_current_line_count++;
}
goldfish_tty_current_line_count++;
- qtty = &goldfish_ttys[
pdev->id
];
+ qtty = &goldfish_ttys[
line
];
spin_lock_init(&qtty->lock);
tty_port_init(&qtty->port);
qtty->port.ops = &goldfish_port_ops;
spin_lock_init(&qtty->lock);
tty_port_init(&qtty->port);
qtty->port.ops = &goldfish_port_ops;
@@
-269,13
+275,13
@@
static int goldfish_tty_probe(struct platform_device *pdev)
writel(GOLDFISH_TTY_CMD_INT_DISABLE, base + GOLDFISH_TTY_CMD);
ret = request_irq(irq, goldfish_tty_interrupt, IRQF_SHARED,
writel(GOLDFISH_TTY_CMD_INT_DISABLE, base + GOLDFISH_TTY_CMD);
ret = request_irq(irq, goldfish_tty_interrupt, IRQF_SHARED,
- "goldfish_tty",
pdev
);
+ "goldfish_tty",
qtty
);
if (ret)
goto err_request_irq_failed;
ttydev = tty_port_register_device(&qtty->port, goldfish_tty_driver,
if (ret)
goto err_request_irq_failed;
ttydev = tty_port_register_device(&qtty->port, goldfish_tty_driver,
-
pdev->id
, &pdev->dev);
+
line
, &pdev->dev);
if (IS_ERR(ttydev)) {
ret = PTR_ERR(ttydev);
goto err_tty_register_device_failed;
if (IS_ERR(ttydev)) {
ret = PTR_ERR(ttydev);
goto err_tty_register_device_failed;
@@
-286,8
+292,9
@@
static int goldfish_tty_probe(struct platform_device *pdev)
qtty->console.device = goldfish_tty_console_device;
qtty->console.setup = goldfish_tty_console_setup;
qtty->console.flags = CON_PRINTBUFFER;
qtty->console.device = goldfish_tty_console_device;
qtty->console.setup = goldfish_tty_console_setup;
qtty->console.flags = CON_PRINTBUFFER;
- qtty->console.index =
pdev->id
;
+ qtty->console.index =
line
;
register_console(&qtty->console);
register_console(&qtty->console);
+ platform_set_drvdata(pdev, qtty);
mutex_unlock(&goldfish_tty_lock);
return 0;
mutex_unlock(&goldfish_tty_lock);
return 0;
@@
-307,13
+314,12
@@
err_unmap:
static int goldfish_tty_remove(struct platform_device *pdev)
{
static int goldfish_tty_remove(struct platform_device *pdev)
{
- struct goldfish_tty *qtty;
+ struct goldfish_tty *qtty
= platform_get_drvdata(pdev)
;
mutex_lock(&goldfish_tty_lock);
mutex_lock(&goldfish_tty_lock);
- qtty = &goldfish_ttys[pdev->id];
unregister_console(&qtty->console);
unregister_console(&qtty->console);
- tty_unregister_device(goldfish_tty_driver,
pdev->id
);
+ tty_unregister_device(goldfish_tty_driver,
qtty->console.index
);
iounmap(qtty->base);
qtty->base = NULL;
free_irq(qtty->irq, pdev);
iounmap(qtty->base);
qtty->base = NULL;
free_irq(qtty->irq, pdev);
@@
-324,11
+330,19
@@
static int goldfish_tty_remove(struct platform_device *pdev)
return 0;
}
return 0;
}
+static const struct of_device_id goldfish_tty_of_match[] = {
+ { .compatible = "google,goldfish-tty", },
+ {},
+};
+
+MODULE_DEVICE_TABLE(of, goldfish_tty_of_match);
+
static struct platform_driver goldfish_tty_platform_driver = {
.probe = goldfish_tty_probe,
.remove = goldfish_tty_remove,
.driver = {
static struct platform_driver goldfish_tty_platform_driver = {
.probe = goldfish_tty_probe,
.remove = goldfish_tty_remove,
.driver = {
- .name = "goldfish_tty"
+ .name = "goldfish_tty",
+ .of_match_table = goldfish_tty_of_match,
}
};
}
};