]> Git Repo - J-u-boot.git/blob - drivers/input/keyboard-uclass.c
Merge tag 'xilinx-for-v2022.04-rc1' of https://source.denx.de/u-boot/custodians/u...
[J-u-boot.git] / drivers / input / keyboard-uclass.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright (c) 2015 Google, Inc
4  */
5
6 #define LOG_CATEGORY UCLASS_KEYBOARD
7
8 #include <common.h>
9 #include <dm.h>
10 #include <keyboard.h>
11 #include <log.h>
12
13 static int keyboard_start(struct stdio_dev *sdev)
14 {
15         struct udevice *dev = sdev->priv;
16         struct keyboard_ops *ops = keyboard_get_ops(dev);
17
18         if (ops->start)
19                 return ops->start(dev);
20
21         return 0;
22 }
23
24 static int keyboard_stop(struct stdio_dev *sdev)
25 {
26         struct udevice *dev = sdev->priv;
27         struct keyboard_ops *ops = keyboard_get_ops(dev);
28
29         if (ops->stop)
30                 return ops->stop(dev);
31
32         return 0;
33 }
34
35 static int keyboard_tstc(struct stdio_dev *sdev)
36 {
37         struct udevice *dev = sdev->priv;
38         struct keyboard_priv *priv = dev_get_uclass_priv(dev);
39         struct keyboard_ops *ops = keyboard_get_ops(dev);
40
41         /* Just get input to do this for us if we can */
42         if (priv->input.dev)
43                 return input_tstc(&priv->input);
44         else if (ops->tstc)
45                 return ops->tstc(dev);
46
47         return -ENOSYS;
48 }
49
50 static int keyboard_getc(struct stdio_dev *sdev)
51 {
52         struct udevice *dev = sdev->priv;
53         struct keyboard_priv *priv = dev_get_uclass_priv(dev);
54         struct keyboard_ops *ops = keyboard_get_ops(dev);
55
56         /* Just get input to do this for us if we can */
57         if (priv->input.dev)
58                 return input_getc(&priv->input);
59         else if (ops->getc)
60                 return ops->getc(dev);
61
62         return -ENOSYS;
63 }
64
65 static int keyboard_pre_probe(struct udevice *dev)
66 {
67         struct keyboard_priv *priv = dev_get_uclass_priv(dev);
68         struct stdio_dev *sdev = &priv->sdev;
69         int ret;
70
71         strlcpy(sdev->name, dev->name, sizeof(sdev->name));
72         sdev->flags = DEV_FLAGS_INPUT;
73         sdev->getc = keyboard_getc;
74         sdev->tstc = keyboard_tstc;
75         sdev->start = keyboard_start;
76         sdev->stop = keyboard_stop;
77         sdev->priv = dev;
78         ret = input_init(&priv->input, 0);
79         if (ret) {
80                 debug("%s: Cannot set up input, ret=%d - please add DEBUG to drivers/input/input.c to figure out the cause\n",
81                       __func__, ret);
82                 return ret;
83         }
84
85         return 0;
86 }
87
88 UCLASS_DRIVER(keyboard) = {
89         .id             = UCLASS_KEYBOARD,
90         .name           = "keyboard",
91         .pre_probe      = keyboard_pre_probe,
92         .per_device_auto        = sizeof(struct keyboard_priv),
93 };
This page took 0.033307 seconds and 4 git commands to generate.