Lines Matching +full:de +full:- +full:asserted
4 * Copyright (C) 2015-2016 Texas Instruments Incorporated - https://www.ti.com/
23 #include <linux/reset-controller.h>
25 #include <dt-bindings/reset/ti-syscon.h>
28 * struct ti_syscon_reset_control - reset control structure
35 * @flags: reset flag indicating how the (de)assert and status are handled
48 * struct ti_syscon_reset_data - reset controller information structure
50 * @regmap: regmap handle containing the memory-mapped reset registers
65 * ti_syscon_reset_assert() - assert device reset
67 * @id: ID of the reset to be asserted
81 if (id >= data->nr_controls) in ti_syscon_reset_assert()
82 return -EINVAL; in ti_syscon_reset_assert()
84 control = &data->controls[id]; in ti_syscon_reset_assert()
86 if (control->flags & ASSERT_NONE) in ti_syscon_reset_assert()
87 return -ENOTSUPP; /* assert not supported for this reset */ in ti_syscon_reset_assert()
89 mask = BIT(control->assert_bit); in ti_syscon_reset_assert()
90 value = (control->flags & ASSERT_SET) ? mask : 0x0; in ti_syscon_reset_assert()
92 return regmap_update_bits(data->regmap, control->assert_offset, mask, value); in ti_syscon_reset_assert()
96 * ti_syscon_reset_deassert() - deassert device reset
112 if (id >= data->nr_controls) in ti_syscon_reset_deassert()
113 return -EINVAL; in ti_syscon_reset_deassert()
115 control = &data->controls[id]; in ti_syscon_reset_deassert()
117 if (control->flags & DEASSERT_NONE) in ti_syscon_reset_deassert()
118 return -ENOTSUPP; /* deassert not supported for this reset */ in ti_syscon_reset_deassert()
120 mask = BIT(control->deassert_bit); in ti_syscon_reset_deassert()
121 value = (control->flags & DEASSERT_SET) ? mask : 0x0; in ti_syscon_reset_deassert()
123 return regmap_update_bits(data->regmap, control->deassert_offset, mask, value); in ti_syscon_reset_deassert()
127 * ti_syscon_reset_status() - check device reset status
134 * Return: 0 if reset is deasserted, true if reset is asserted, else a
145 if (id >= data->nr_controls) in ti_syscon_reset_status()
146 return -EINVAL; in ti_syscon_reset_status()
148 control = &data->controls[id]; in ti_syscon_reset_status()
150 if (control->flags & STATUS_NONE) in ti_syscon_reset_status()
151 return -ENOTSUPP; /* status not supported for this reset */ in ti_syscon_reset_status()
153 ret = regmap_read(data->regmap, control->status_offset, &reset_state); in ti_syscon_reset_status()
157 return !(reset_state & BIT(control->status_bit)) == in ti_syscon_reset_status()
158 !(control->flags & STATUS_SET); in ti_syscon_reset_status()
169 struct device *dev = &pdev->dev; in ti_syscon_reset_probe()
170 struct device_node *np = dev->of_node; in ti_syscon_reset_probe()
179 return -ENOMEM; in ti_syscon_reset_probe()
181 regmap = syscon_node_to_regmap(np->parent); in ti_syscon_reset_probe()
185 list = of_get_property(np, "ti,reset-bits", &size); in ti_syscon_reset_probe()
188 return -EINVAL; in ti_syscon_reset_probe()
195 return -ENOMEM; in ti_syscon_reset_probe()
207 data->rcdev.ops = &ti_syscon_reset_ops; in ti_syscon_reset_probe()
208 data->rcdev.owner = THIS_MODULE; in ti_syscon_reset_probe()
209 data->rcdev.of_node = np; in ti_syscon_reset_probe()
210 data->rcdev.nr_resets = nr_controls; in ti_syscon_reset_probe()
211 data->regmap = regmap; in ti_syscon_reset_probe()
212 data->controls = controls; in ti_syscon_reset_probe()
213 data->nr_controls = nr_controls; in ti_syscon_reset_probe()
217 return devm_reset_controller_register(dev, &data->rcdev); in ti_syscon_reset_probe()
221 { .compatible = "ti,syscon-reset", },
229 .name = "ti-syscon-reset",
236 MODULE_AUTHOR("Suman Anna <s-anna@ti.com>");