2 * Copyright (c) 2015 Google, Inc
4 * SPDX-License-Identifier: GPL-2.0+
11 static int keyboard_start(struct stdio_dev
*sdev
)
13 struct udevice
*dev
= sdev
->priv
;
14 struct keyboard_ops
*ops
= keyboard_get_ops(dev
);
17 return ops
->start(dev
);
22 static int keyboard_stop(struct stdio_dev
*sdev
)
24 struct udevice
*dev
= sdev
->priv
;
25 struct keyboard_ops
*ops
= keyboard_get_ops(dev
);
28 return ops
->stop(dev
);
33 static int keyboard_tstc(struct stdio_dev
*sdev
)
35 struct udevice
*dev
= sdev
->priv
;
36 struct keyboard_priv
*priv
= dev_get_uclass_priv(dev
);
37 struct keyboard_ops
*ops
= keyboard_get_ops(dev
);
39 /* Just get input to do this for us if we can */
41 return input_tstc(&priv
->input
);
43 return ops
->tstc(dev
);
48 static int keyboard_getc(struct stdio_dev
*sdev
)
50 struct udevice
*dev
= sdev
->priv
;
51 struct keyboard_priv
*priv
= dev_get_uclass_priv(dev
);
52 struct keyboard_ops
*ops
= keyboard_get_ops(dev
);
54 /* Just get input to do this for us if we can */
56 return input_getc(&priv
->input
);
58 return ops
->getc(dev
);
63 static int keyboard_pre_probe(struct udevice
*dev
)
65 struct keyboard_priv
*priv
= dev_get_uclass_priv(dev
);
66 struct stdio_dev
*sdev
= &priv
->sdev
;
69 strlcpy(sdev
->name
, dev
->name
, sizeof(sdev
->name
));
70 sdev
->flags
= DEV_FLAGS_INPUT
;
71 sdev
->getc
= keyboard_getc
;
72 sdev
->tstc
= keyboard_tstc
;
73 sdev
->start
= keyboard_start
;
74 sdev
->stop
= keyboard_stop
;
76 ret
= input_init(&priv
->input
, 0);
78 debug("%s: Cannot set up input, ret=%d - please add DEBUG to drivers/input/input.c to figure out the cause\n",
86 UCLASS_DRIVER(keyboard
) = {
87 .id
= UCLASS_KEYBOARD
,
89 .pre_probe
= keyboard_pre_probe
,
90 .per_device_auto_alloc_size
= sizeof(struct keyboard_priv
),