Lines Matching +full:smem +full:- +full:state +full:- +full:names

1 // SPDX-License-Identifier: GPL-2.0-only
4 * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
18 * struct qcom_smem_state - state context
19 * @refcount: refcount for the state
20 * @orphan: boolean indicator that this state has been unregistered
22 * @of_node: of_node to use for matching the state in DT
24 * @ops: ops for the state
39 * qcom_smem_state_update_bits() - update the masked bits in state with value
40 * @state: state handle acquired by calling qcom_smem_state_get()
46 int qcom_smem_state_update_bits(struct qcom_smem_state *state, in qcom_smem_state_update_bits() argument
50 if (state->orphan) in qcom_smem_state_update_bits()
51 return -ENXIO; in qcom_smem_state_update_bits()
53 if (!state->ops.update_bits) in qcom_smem_state_update_bits()
54 return -ENOTSUPP; in qcom_smem_state_update_bits()
56 return state->ops.update_bits(state->priv, mask, value); in qcom_smem_state_update_bits()
62 struct qcom_smem_state *state; in of_node_to_state() local
66 list_for_each_entry(state, &smem_states, list) { in of_node_to_state()
67 if (state->of_node == np) { in of_node_to_state()
68 kref_get(&state->refcount); in of_node_to_state()
69 return state; in of_node_to_state()
72 return ERR_PTR(-EPROBE_DEFER); in of_node_to_state()
76 * qcom_smem_state_get() - acquire handle to a state
78 * @con_id: name of the state to lookup
79 * @bit: flags from the state reference, indicating which bit's affected
81 * Returns handle to the state, or ERR_PTR(). qcom_smem_state_put() must be
82 * called to release the returned state handle.
88 struct qcom_smem_state *state; in qcom_smem_state_get() local
94 index = of_property_match_string(dev->of_node, in qcom_smem_state_get()
95 "qcom,smem-state-names", in qcom_smem_state_get()
98 dev_err(dev, "missing qcom,smem-state-names\n"); in qcom_smem_state_get()
103 ret = of_parse_phandle_with_args(dev->of_node, in qcom_smem_state_get()
104 "qcom,smem-states", in qcom_smem_state_get()
105 "#qcom,smem-state-cells", in qcom_smem_state_get()
109 dev_err(dev, "failed to parse qcom,smem-states property\n"); in qcom_smem_state_get()
114 dev_err(dev, "invalid #qcom,smem-state-cells\n"); in qcom_smem_state_get()
115 state = ERR_PTR(-EINVAL); in qcom_smem_state_get()
119 state = of_node_to_state(args.np); in qcom_smem_state_get()
120 if (IS_ERR(state)) in qcom_smem_state_get()
127 return state; in qcom_smem_state_get()
133 struct qcom_smem_state *state = container_of(ref, struct qcom_smem_state, refcount); in qcom_smem_state_release() local
135 list_del(&state->list); in qcom_smem_state_release()
136 of_node_put(state->of_node); in qcom_smem_state_release()
137 kfree(state); in qcom_smem_state_release()
141 * qcom_smem_state_put() - release state handle
142 * @state: state handle to be released
144 void qcom_smem_state_put(struct qcom_smem_state *state) in qcom_smem_state_put() argument
147 kref_put(&state->refcount, qcom_smem_state_release); in qcom_smem_state_put()
158 * devm_qcom_smem_state_get() - acquire handle to a devres managed state
160 * @con_id: name of the state to lookup
161 * @bit: flags from the state reference, indicating which bit's affected
163 * Returns handle to the state, or ERR_PTR(). qcom_smem_state_put() is called
170 struct qcom_smem_state **ptr, *state; in devm_qcom_smem_state_get() local
174 return ERR_PTR(-ENOMEM); in devm_qcom_smem_state_get()
176 state = qcom_smem_state_get(dev, con_id, bit); in devm_qcom_smem_state_get()
177 if (!IS_ERR(state)) { in devm_qcom_smem_state_get()
178 *ptr = state; in devm_qcom_smem_state_get()
184 return state; in devm_qcom_smem_state_get()
189 * qcom_smem_state_register() - register a new state
198 struct qcom_smem_state *state; in qcom_smem_state_register() local
200 state = kzalloc(sizeof(*state), GFP_KERNEL); in qcom_smem_state_register()
201 if (!state) in qcom_smem_state_register()
202 return ERR_PTR(-ENOMEM); in qcom_smem_state_register()
204 kref_init(&state->refcount); in qcom_smem_state_register()
206 state->of_node = of_node_get(of_node); in qcom_smem_state_register()
207 state->ops = *ops; in qcom_smem_state_register()
208 state->priv = priv; in qcom_smem_state_register()
211 list_add(&state->list, &smem_states); in qcom_smem_state_register()
214 return state; in qcom_smem_state_register()
219 * qcom_smem_state_unregister() - unregister a registered state
220 * @state: state handle to be unregistered
222 void qcom_smem_state_unregister(struct qcom_smem_state *state) in qcom_smem_state_unregister() argument
224 state->orphan = true; in qcom_smem_state_unregister()
225 qcom_smem_state_put(state); in qcom_smem_state_unregister()