Lines Matching +full:counter +full:- +full:1
1 // SPDX-License-Identifier: GPL-2.0
15 #include <linux/counter.h>
37 if (ftm->big_endian) in ftm_read()
38 *data = ioread32be(ftm->ftm_base + offset); in ftm_read()
40 *data = ioread32(ftm->ftm_base + offset); in ftm_read()
45 if (ftm->big_endian) in ftm_write()
46 iowrite32be(data, ftm->ftm_base + offset); in ftm_write()
48 iowrite32(data, ftm->ftm_base + offset); in ftm_write()
60 FTM_FIELD_UPDATE(ftm, FTM_MODE, FTM_MODE_WPDIS, 1); in ftm_clear_write_protection()
65 FTM_FIELD_UPDATE(ftm, FTM_FMS, FTM_FMS_WPEN, 1); in ftm_set_write_protection()
70 /* Reset hardware counter to CNTIN */ in ftm_reset_counter()
111 * This is enough to disable the counter. No clock has been in ftm_quaddec_disable()
117 static int ftm_quaddec_get_prescaler(struct counter_device *counter, in ftm_quaddec_get_prescaler() argument
120 struct ftm_quaddec *ftm = counter_priv(counter); in ftm_quaddec_get_prescaler()
130 static int ftm_quaddec_set_prescaler(struct counter_device *counter, in ftm_quaddec_set_prescaler() argument
133 struct ftm_quaddec *ftm = counter_priv(counter); in ftm_quaddec_set_prescaler()
135 mutex_lock(&ftm->ftm_quaddec_mutex); in ftm_quaddec_set_prescaler()
141 /* Also resets the counter as it is undefined anyway now */ in ftm_quaddec_set_prescaler()
144 mutex_unlock(&ftm->ftm_quaddec_mutex); in ftm_quaddec_set_prescaler()
149 "1", "2", "4", "8", "16", "32", "64", "128"
160 static int ftm_quaddec_count_read(struct counter_device *counter, in ftm_quaddec_count_read() argument
164 struct ftm_quaddec *const ftm = counter_priv(counter); in ftm_quaddec_count_read()
174 static int ftm_quaddec_count_write(struct counter_device *counter, in ftm_quaddec_count_write() argument
178 struct ftm_quaddec *const ftm = counter_priv(counter); in ftm_quaddec_count_write()
181 dev_warn(&ftm->pdev->dev, "Can only accept '0' as new counter value\n"); in ftm_quaddec_count_write()
182 return -EINVAL; in ftm_quaddec_count_write()
190 static int ftm_quaddec_count_function_read(struct counter_device *counter, in ftm_quaddec_count_function_read() argument
199 static int ftm_quaddec_action_read(struct counter_device *counter, in ftm_quaddec_action_read() argument
219 .name = "Channel 1 Phase A"
222 .id = 1,
223 .name = "Channel 1 Phase B"
236 .signal = &ftm_quaddec_signals[1]
250 .name = "Channel 1 Count",
261 struct counter_device *counter; in ftm_quaddec_probe() local
264 struct device_node *node = pdev->dev.of_node; in ftm_quaddec_probe()
268 counter = devm_counter_alloc(&pdev->dev, sizeof(*ftm)); in ftm_quaddec_probe()
269 if (!counter) in ftm_quaddec_probe()
270 return -ENOMEM; in ftm_quaddec_probe()
271 ftm = counter_priv(counter); in ftm_quaddec_probe()
275 dev_err(&pdev->dev, "Failed to get memory region\n"); in ftm_quaddec_probe()
276 return -ENODEV; in ftm_quaddec_probe()
279 ftm->pdev = pdev; in ftm_quaddec_probe()
280 ftm->big_endian = of_property_read_bool(node, "big-endian"); in ftm_quaddec_probe()
281 ftm->ftm_base = devm_ioremap(&pdev->dev, io->start, resource_size(io)); in ftm_quaddec_probe()
283 if (!ftm->ftm_base) { in ftm_quaddec_probe()
284 dev_err(&pdev->dev, "Failed to map memory region\n"); in ftm_quaddec_probe()
285 return -EINVAL; in ftm_quaddec_probe()
287 counter->name = dev_name(&pdev->dev); in ftm_quaddec_probe()
288 counter->parent = &pdev->dev; in ftm_quaddec_probe()
289 counter->ops = &ftm_quaddec_cnt_ops; in ftm_quaddec_probe()
290 counter->counts = &ftm_quaddec_counts; in ftm_quaddec_probe()
291 counter->num_counts = 1; in ftm_quaddec_probe()
292 counter->signals = ftm_quaddec_signals; in ftm_quaddec_probe()
293 counter->num_signals = ARRAY_SIZE(ftm_quaddec_signals); in ftm_quaddec_probe()
295 mutex_init(&ftm->ftm_quaddec_mutex); in ftm_quaddec_probe()
299 ret = devm_add_action_or_reset(&pdev->dev, ftm_quaddec_disable, ftm); in ftm_quaddec_probe()
303 ret = devm_counter_add(&pdev->dev, counter); in ftm_quaddec_probe()
305 return dev_err_probe(&pdev->dev, ret, "Failed to add counter\n"); in ftm_quaddec_probe()
311 { .compatible = "fsl,ftm-quaddec" },
317 .name = "ftm-quaddec",
328 MODULE_IMPORT_NS(COUNTER);