1/* SPDX-License-Identifier: GPL-2.0+ */
2/*
3 * Copyright 2023 Google LLC
4 * Written by Simon Glass <sjg@chromium.org>
5 */
6
7#ifndef __CEDIT_H
8#define __CEDIT_H
9
10#include <dm/ofnode_decl.h>
11
12struct abuf;
13struct expo;
14struct scene;
15struct video_priv;
16
17enum {
18	/* size increment for writing FDT */
19	CEDIT_SIZE_INC	= 1024,
20};
21
22/* Name of the cedit node in the devicetree */
23#define CEDIT_NODE_NAME		"cedit-values"
24
25extern struct expo *cur_exp;
26
27/**
28 * cedit_arange() - Arrange objects in a configuration-editor scene
29 *
30 * @exp: Expo to update
31 * @vid_priv: Private info of the video device
32 * @scene_id: scene ID to arrange
33 * Returns: 0 if OK, -ve on error
34 */
35int cedit_arange(struct expo *exp, struct video_priv *vid_priv, uint scene_id);
36
37/**
38 * cedit_run() - Run a configuration editor
39 *
40 * This accepts input until the user quits with Escape
41 *
42 * @exp: Expo to use
43 * Returns: 0 if OK, -ve on error
44 */
45int cedit_run(struct expo *exp);
46
47/**
48 * cedit_prepare() - Prepare to run a cedit
49 *
50 * Set up the video device, select the first scene and highlight the first item.
51 * This ensures that all menus have a selected item.
52 *
53 * @exp: Expo to use
54 * @vid_privp: Set to private data for the video device
55 * @scnp: Set to the first scene
56 * Return: scene ID of first scene if OK, -ve on error
57 */
58int cedit_prepare(struct expo *exp, struct video_priv **vid_privp,
59		  struct scene **scnp);
60
61/**
62 * cedit_write_settings() - Write settings in FDT format
63 *
64 * Sets up an FDT with the settings
65 *
66 * @exp: Expo to write settings from
67 * @buf: Returns abuf containing the settings FDT (inited by this function)
68 * Return: 0 if OK, -ve on error
69 */
70int cedit_write_settings(struct expo *exp, struct abuf *buf);
71
72/**
73 * cedit_read_settings() - Read settings in FDT format
74 *
75 * Read an FDT with the settings
76 *
77 * @exp: Expo to read settings into
78 * @tree: Tree to read from
79 * Return: 0 if OK, -ve on error
80 */
81int cedit_read_settings(struct expo *exp, oftree tree);
82
83/**
84 * cedit_write_settings_env() - Write settings to envrionment variables
85 *
86 * @exp: Expo to write settings from
87 * @verbose: true to print each var as it is set
88 * Return: 0 if OK, -ve on error
89 */
90int cedit_write_settings_env(struct expo *exp, bool verbose);
91
92/*
93 * cedit_read_settings_env() - Read settings from the environment
94 *
95 * @exp: Expo to read settings into
96 * @verbose: true to print each var before it is read
97 */
98int cedit_read_settings_env(struct expo *exp, bool verbose);
99
100/**
101 * cedit_write_settings_cmos() - Write settings to CMOS RAM
102 *
103 * Write settings to the defined places in CMOS RAM
104 *
105 * @exp: Expo to write settings from
106 * @dev: UCLASS_RTC device containing space for this information
107 * Returns 0 if OK, -ve on error
108 * @verbose: true to print a summary at the end
109 */
110int cedit_write_settings_cmos(struct expo *exp, struct udevice *dev,
111			      bool verbose);
112
113/**
114 * cedit_read_settings_cmos() - Read settings from CMOS RAM
115 *
116 * Read settings from the defined places in CMO RAM
117 *
118 * @exp: Expo to read settings into
119 * @dev: RTC device to read settings from
120 * @verbose: true to print a summary at the end
121 */
122int cedit_read_settings_cmos(struct expo *exp, struct udevice *dev,
123			     bool verbose);
124
125#endif /* __CEDIT_H */
126