Hi Vivek,
On Tue, 2017-04-04 at 16:09 +0530, Vivek Gautam wrote:
[...]
[...]I'd prefer to mirror the gpiod API a little, and to have the number
contained in the array structure, similar to struct gpio_descs:
Alright, i can update this.Ok, understood.
I took regulator_bulk interface as the reference, but now i see
gpio_descs has a smaller footprint.
I think the smaller footprint API is more convenient for the user.
[...]
The way I understood the array API was as a method of handling a list ofJust trying to think again in line with the regulator bulk APIs.+ * Returns 0 on success or error number on failureCan we make this count and return a pointer to the newly created array?
+ */
+static int reset_control_array_get(struct device *dev, int num_rsts,
+ struct reset_control_array *resets,
+ bool shared, bool optional)
static struct reset_controls *
reset_control_array_get(struct device *dev, bool shared, bool optional)
{
...
That way the consumer doesn't have to care about counting and array
allocation.
Can't a user provide a list of reset controls as data and thus
request reset controls with a "id" and num_resets available.
e.g.
const char * const rst_names[] = {
"rst1", "rst2" ...
};
xyz_data = {
.resets = rst_names;
.num = ARRAY_SIZE(rst_names);
};
and then the driver making use of reset_control_array APIs
to request this list of reset controls and assert/deassert them.
I am assuming this case when one user driver is used across a bunch
of platforms with different number of resets available.
We may not want to rely solely on the device tree entries, since
the resets can be mandatory in few cases and we may want to
return failure.
anonymous resets, specified as
resets = <&reset 1>, <&reset 2>, <&reset 3>;
// reset-names = "rst1", "rst2", "rst3"; /* don't care */
in the device tree.
Now if you want to handle a partial list of those as an unordered list,
with special consideration for others, that could be added as a separate
API when there is use for it. But I expect that most potential users of
this array API will not have to make such a distinction.
Oh right, it is static. Please ignore.No, that's supposed to be a static function.@@ -85,6 +107,39 @@ static inline struct reset_control *__devm_reset_control_get(Is this missing a stub for reset_control_array_get?
return -ENOTSUPP;
}
+static inline int reset_control_array_assert(int num_rsts,
+ struct reset_control_array *resets)
+{
+ return 0;
+}
+
+static inline int reset_control_array_deassert(int num_rsts,
+ struct reset_control_array *resets)
+{
+ return 0;
+}
regards
Philipp