Lines Matching refs:mux
29 static int i2c_mux_reg_set(const struct regmux *mux, unsigned int chan_id) in i2c_mux_reg_set() argument
31 if (!mux->data.reg) in i2c_mux_reg_set()
40 switch (mux->data.reg_size) { in i2c_mux_reg_set()
42 if (mux->data.little_endian) in i2c_mux_reg_set()
43 iowrite32(chan_id, mux->data.reg); in i2c_mux_reg_set()
45 iowrite32be(chan_id, mux->data.reg); in i2c_mux_reg_set()
46 if (!mux->data.write_only) in i2c_mux_reg_set()
47 ioread32(mux->data.reg); in i2c_mux_reg_set()
50 if (mux->data.little_endian) in i2c_mux_reg_set()
51 iowrite16(chan_id, mux->data.reg); in i2c_mux_reg_set()
53 iowrite16be(chan_id, mux->data.reg); in i2c_mux_reg_set()
54 if (!mux->data.write_only) in i2c_mux_reg_set()
55 ioread16(mux->data.reg); in i2c_mux_reg_set()
58 iowrite8(chan_id, mux->data.reg); in i2c_mux_reg_set()
59 if (!mux->data.write_only) in i2c_mux_reg_set()
60 ioread8(mux->data.reg); in i2c_mux_reg_set()
70 struct regmux *mux = data; in i2c_mux_reg_select() local
72 return i2c_mux_reg_set(mux, chan); in i2c_mux_reg_select()
78 struct regmux *mux = data; in i2c_mux_reg_deselect() local
80 if (mux->data.idle_in_use) in i2c_mux_reg_deselect()
81 return i2c_mux_reg_set(mux, mux->data.idle); in i2c_mux_reg_deselect()
87 static int i2c_mux_reg_probe_dt(struct regmux *mux, in i2c_mux_reg_probe_dt() argument
110 mux->parent = adapter; in i2c_mux_reg_probe_dt()
111 mux->data.parent = i2c_adapter_id(adapter); in i2c_mux_reg_probe_dt()
114 mux->data.n_values = of_get_child_count(np); in i2c_mux_reg_probe_dt()
116 mux->data.little_endian = true; in i2c_mux_reg_probe_dt()
118 mux->data.little_endian = false; in i2c_mux_reg_probe_dt()
122 mux->data.little_endian = true; in i2c_mux_reg_probe_dt()
125 mux->data.little_endian = false; in i2c_mux_reg_probe_dt()
131 mux->data.write_only = true; in i2c_mux_reg_probe_dt()
133 mux->data.write_only = false; in i2c_mux_reg_probe_dt()
136 sizeof(*mux->data.values) * mux->data.n_values, in i2c_mux_reg_probe_dt()
147 mux->data.values = values; in i2c_mux_reg_probe_dt()
149 if (!of_property_read_u32(np, "idle-state", &mux->data.idle)) in i2c_mux_reg_probe_dt()
150 mux->data.idle_in_use = true; in i2c_mux_reg_probe_dt()
154 mux->data.reg_size = resource_size(&res); in i2c_mux_reg_probe_dt()
155 mux->data.reg = devm_ioremap_resource(&pdev->dev, &res); in i2c_mux_reg_probe_dt()
156 if (IS_ERR(mux->data.reg)) in i2c_mux_reg_probe_dt()
157 return PTR_ERR(mux->data.reg); in i2c_mux_reg_probe_dt()
163 static int i2c_mux_reg_probe_dt(struct regmux *mux, in i2c_mux_reg_probe_dt() argument
172 struct regmux *mux; in i2c_mux_reg_probe() local
179 mux = devm_kzalloc(&pdev->dev, sizeof(*mux), GFP_KERNEL); in i2c_mux_reg_probe()
180 if (!mux) in i2c_mux_reg_probe()
183 platform_set_drvdata(pdev, mux); in i2c_mux_reg_probe()
186 memcpy(&mux->data, dev_get_platdata(&pdev->dev), in i2c_mux_reg_probe()
187 sizeof(mux->data)); in i2c_mux_reg_probe()
189 parent = i2c_get_adapter(mux->data.parent); in i2c_mux_reg_probe()
193 mux->parent = parent; in i2c_mux_reg_probe()
195 ret = i2c_mux_reg_probe_dt(mux, pdev); in i2c_mux_reg_probe()
202 if (!mux->data.reg) { in i2c_mux_reg_probe()
206 mux->data.reg_size = resource_size(res); in i2c_mux_reg_probe()
207 mux->data.reg = devm_ioremap_resource(&pdev->dev, res); in i2c_mux_reg_probe()
208 if (IS_ERR(mux->data.reg)) in i2c_mux_reg_probe()
209 return PTR_ERR(mux->data.reg); in i2c_mux_reg_probe()
212 if (mux->data.reg_size != 4 && mux->data.reg_size != 2 && in i2c_mux_reg_probe()
213 mux->data.reg_size != 1) { in i2c_mux_reg_probe()
218 mux->adap = devm_kzalloc(&pdev->dev, in i2c_mux_reg_probe()
219 sizeof(*mux->adap) * mux->data.n_values, in i2c_mux_reg_probe()
221 if (!mux->adap) { in i2c_mux_reg_probe()
226 if (mux->data.idle_in_use) in i2c_mux_reg_probe()
231 for (i = 0; i < mux->data.n_values; i++) { in i2c_mux_reg_probe()
232 nr = mux->data.base_nr ? (mux->data.base_nr + i) : 0; in i2c_mux_reg_probe()
233 class = mux->data.classes ? mux->data.classes[i] : 0; in i2c_mux_reg_probe()
235 mux->adap[i] = i2c_add_mux_adapter(mux->parent, &pdev->dev, mux, in i2c_mux_reg_probe()
236 nr, mux->data.values[i], in i2c_mux_reg_probe()
239 if (!mux->adap[i]) { in i2c_mux_reg_probe()
247 mux->data.n_values, mux->parent->name); in i2c_mux_reg_probe()
253 i2c_del_mux_adapter(mux->adap[i - 1]); in i2c_mux_reg_probe()
260 struct regmux *mux = platform_get_drvdata(pdev); in i2c_mux_reg_remove() local
263 for (i = 0; i < mux->data.n_values; i++) in i2c_mux_reg_remove()
264 i2c_del_mux_adapter(mux->adap[i]); in i2c_mux_reg_remove()
266 i2c_put_adapter(mux->parent); in i2c_mux_reg_remove()