Symbol: idt82p33
drivers/ptp/ptp_idt82p33.c
1002
err = idt82p33_write(idt82p33, channel->dpll_phase_cnfg, val,
drivers/ptp/ptp_idt82p33.c
1006
mutex_unlock(idt82p33->lock);
drivers/ptp/ptp_idt82p33.c
1014
struct idt82p33 *idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
102
struct idt82p33 *idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
1023
mutex_lock(idt82p33->lock);
drivers/ptp/ptp_idt82p33.c
1028
mutex_unlock(idt82p33->lock);
drivers/ptp/ptp_idt82p33.c
1031
dev_err(idt82p33->dev,
drivers/ptp/ptp_idt82p33.c
1040
struct idt82p33 *idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
1046
mutex_lock(idt82p33->lock);
drivers/ptp/ptp_idt82p33.c
1050
mutex_unlock(idt82p33->lock);
drivers/ptp/ptp_idt82p33.c
1059
mutex_unlock(idt82p33->lock);
drivers/ptp/ptp_idt82p33.c
1062
dev_err(idt82p33->dev,
drivers/ptp/ptp_idt82p33.c
1071
struct idt82p33 *idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
1074
mutex_lock(idt82p33->lock);
drivers/ptp/ptp_idt82p33.c
1076
mutex_unlock(idt82p33->lock);
drivers/ptp/ptp_idt82p33.c
1079
dev_err(idt82p33->dev,
drivers/ptp/ptp_idt82p33.c
1089
struct idt82p33 *idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
109
err = idt82p33_read(idt82p33, channel->dpll_mode_cnfg,
drivers/ptp/ptp_idt82p33.c
1092
mutex_lock(idt82p33->lock);
drivers/ptp/ptp_idt82p33.c
1094
mutex_unlock(idt82p33->lock);
drivers/ptp/ptp_idt82p33.c
1097
dev_err(idt82p33->dev,
drivers/ptp/ptp_idt82p33.c
1102
static int idt82p33_channel_init(struct idt82p33 *idt82p33, u32 index)
drivers/ptp/ptp_idt82p33.c
1104
struct idt82p33_channel *channel = &idt82p33->channel[index];
drivers/ptp/ptp_idt82p33.c
1133
channel->idt82p33 = idt82p33;
drivers/ptp/ptp_idt82p33.c
118
err = idt82p33_write(idt82p33, channel->dpll_mode_cnfg,
drivers/ptp/ptp_idt82p33.c
1191
static int idt82p33_enable_channel(struct idt82p33 *idt82p33, u32 index)
drivers/ptp/ptp_idt82p33.c
1199
channel = &idt82p33->channel[index];
drivers/ptp/ptp_idt82p33.c
1201
err = idt82p33_channel_init(idt82p33, index);
drivers/ptp/ptp_idt82p33.c
1203
dev_err(idt82p33->dev,
drivers/ptp/ptp_idt82p33.c
1225
dev_err(idt82p33->dev,
drivers/ptp/ptp_idt82p33.c
1233
dev_err(idt82p33->dev,
drivers/ptp/ptp_idt82p33.c
1239
dev_info(idt82p33->dev, "PLL%d registered as ptp%d\n",
drivers/ptp/ptp_idt82p33.c
1245
static int idt82p33_reset(struct idt82p33 *idt82p33, bool cold)
drivers/ptp/ptp_idt82p33.c
1253
err = idt82p33_read(idt82p33, REG_SOFT_RESET, &cfg, sizeof(cfg));
drivers/ptp/ptp_idt82p33.c
1255
dev_err(idt82p33->dev,
drivers/ptp/ptp_idt82p33.c
1263
err = idt82p33_write(idt82p33, REG_SOFT_RESET, &cfg, sizeof(cfg));
drivers/ptp/ptp_idt82p33.c
1265
dev_err(idt82p33->dev,
drivers/ptp/ptp_idt82p33.c
1270
static int idt82p33_load_firmware(struct idt82p33 *idt82p33)
drivers/ptp/ptp_idt82p33.c
1282
dev_info(idt82p33->dev, "requesting firmware '%s'\n", fname);
drivers/ptp/ptp_idt82p33.c
1284
err = request_firmware(&fw, fname, idt82p33->dev);
drivers/ptp/ptp_idt82p33.c
1287
dev_err(idt82p33->dev,
drivers/ptp/ptp_idt82p33.c
1292
dev_dbg(idt82p33->dev, "firmware size %zu bytes\n", fw->size);
drivers/ptp/ptp_idt82p33.c
1299
dev_err(idt82p33->dev,
drivers/ptp/ptp_idt82p33.c
1309
err = idt82p33_check_and_set_masks(idt82p33, page,
drivers/ptp/ptp_idt82p33.c
131
struct idt82p33 *idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
1318
err = idt82p33_write(idt82p33, REG_ADDR(page, loaddr),
drivers/ptp/ptp_idt82p33.c
1326
idt82p33_display_masks(idt82p33);
drivers/ptp/ptp_idt82p33.c
1334
struct idt82p33 *idt82p33 = container_of(work, struct idt82p33,
drivers/ptp/ptp_idt82p33.c
1341
if (idt82p33->extts_mask == 0)
drivers/ptp/ptp_idt82p33.c
1344
mutex_lock(idt82p33->lock);
drivers/ptp/ptp_idt82p33.c
1349
if ((idt82p33->extts_mask & mask) == 0)
drivers/ptp/ptp_idt82p33.c
1352
err = idt82p33_extts_check_channel(idt82p33, i);
drivers/ptp/ptp_idt82p33.c
1356
if (idt82p33->extts_single_shot) {
drivers/ptp/ptp_idt82p33.c
1357
idt82p33->extts_mask &= ~mask;
drivers/ptp/ptp_idt82p33.c
1360
channel = &idt82p33->channel[i];
drivers/ptp/ptp_idt82p33.c
1366
if (idt82p33->extts_mask)
drivers/ptp/ptp_idt82p33.c
1367
schedule_delayed_work(&idt82p33->extts_work,
drivers/ptp/ptp_idt82p33.c
1370
mutex_unlock(idt82p33->lock);
drivers/ptp/ptp_idt82p33.c
1376
struct idt82p33 *idt82p33;
drivers/ptp/ptp_idt82p33.c
138
err = idt82p33_read(idt82p33, channel->dpll_tod_trigger,
drivers/ptp/ptp_idt82p33.c
1380
idt82p33 = devm_kzalloc(&pdev->dev,
drivers/ptp/ptp_idt82p33.c
1381
sizeof(struct idt82p33), GFP_KERNEL);
drivers/ptp/ptp_idt82p33.c
1382
if (!idt82p33)
drivers/ptp/ptp_idt82p33.c
1385
idt82p33->dev = &pdev->dev;
drivers/ptp/ptp_idt82p33.c
1386
idt82p33->mfd = pdev->dev.parent;
drivers/ptp/ptp_idt82p33.c
1387
idt82p33->lock = &ddata->lock;
drivers/ptp/ptp_idt82p33.c
1388
idt82p33->regmap = ddata->regmap;
drivers/ptp/ptp_idt82p33.c
1389
idt82p33->tod_write_overhead_ns = 0;
drivers/ptp/ptp_idt82p33.c
1390
idt82p33->calculate_overhead_flag = 0;
drivers/ptp/ptp_idt82p33.c
1391
idt82p33->pll_mask = DEFAULT_PLL_MASK;
drivers/ptp/ptp_idt82p33.c
1392
idt82p33->channel[0].output_mask = DEFAULT_OUTPUT_MASK_PLL0;
drivers/ptp/ptp_idt82p33.c
1393
idt82p33->channel[1].output_mask = DEFAULT_OUTPUT_MASK_PLL1;
drivers/ptp/ptp_idt82p33.c
1394
idt82p33->extts_mask = 0;
drivers/ptp/ptp_idt82p33.c
1395
INIT_DELAYED_WORK(&idt82p33->extts_work, idt82p33_extts_check);
drivers/ptp/ptp_idt82p33.c
1397
mutex_lock(idt82p33->lock);
drivers/ptp/ptp_idt82p33.c
1400
idt82p33_reset(idt82p33, true);
drivers/ptp/ptp_idt82p33.c
1402
err = idt82p33_load_firmware(idt82p33);
drivers/ptp/ptp_idt82p33.c
1404
dev_warn(idt82p33->dev,
drivers/ptp/ptp_idt82p33.c
1408
idt82p33_reset(idt82p33, false);
drivers/ptp/ptp_idt82p33.c
1410
if (idt82p33->pll_mask) {
drivers/ptp/ptp_idt82p33.c
1412
if (idt82p33->pll_mask & (1 << i))
drivers/ptp/ptp_idt82p33.c
1413
err = idt82p33_enable_channel(idt82p33, i);
drivers/ptp/ptp_idt82p33.c
1415
err = idt82p33_channel_init(idt82p33, i);
drivers/ptp/ptp_idt82p33.c
1417
dev_err(idt82p33->dev,
drivers/ptp/ptp_idt82p33.c
1424
dev_err(idt82p33->dev,
drivers/ptp/ptp_idt82p33.c
1429
mutex_unlock(idt82p33->lock);
drivers/ptp/ptp_idt82p33.c
1432
idt82p33_ptp_clock_unregister_all(idt82p33);
drivers/ptp/ptp_idt82p33.c
1436
platform_set_drvdata(pdev, idt82p33);
drivers/ptp/ptp_idt82p33.c
1443
struct idt82p33 *idt82p33 = platform_get_drvdata(pdev);
drivers/ptp/ptp_idt82p33.c
1445
cancel_delayed_work_sync(&idt82p33->extts_work);
drivers/ptp/ptp_idt82p33.c
1447
idt82p33_ptp_clock_unregister_all(idt82p33);
drivers/ptp/ptp_idt82p33.c
151
return idt82p33_write(idt82p33, channel->dpll_tod_trigger,
drivers/ptp/ptp_idt82p33.c
158
struct idt82p33 *idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
162
err = idt82p33_read(idt82p33, channel->dpll_tod_sts, buf, sizeof(buf));
drivers/ptp/ptp_idt82p33.c
215
struct idt82p33 *idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
220
err = idt82p33_read(idt82p33, channel->dpll_tod_sts, buf, sizeof(buf));
drivers/ptp/ptp_idt82p33.c
230
dev_err(idt82p33->dev, "%s: err = %d", __func__, err);
drivers/ptp/ptp_idt82p33.c
239
struct idt82p33 *idt82p33;
drivers/ptp/ptp_idt82p33.c
246
idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
247
old_mask = idt82p33->extts_mask;
drivers/ptp/ptp_idt82p33.c
254
if (idt82p33->extts_mask & mask)
drivers/ptp/ptp_idt82p33.c
261
dev_err(idt82p33->dev, "%s: No valid pin found for Pll%d!\n",
drivers/ptp/ptp_idt82p33.c
269
dev_err(idt82p33->dev,
drivers/ptp/ptp_idt82p33.c
274
err = arm_tod_read_with_trigger(&idt82p33->channel[index], trigger);
drivers/ptp/ptp_idt82p33.c
277
idt82p33->extts_mask |= mask;
drivers/ptp/ptp_idt82p33.c
278
idt82p33->channel[index].tod_trigger = trigger;
drivers/ptp/ptp_idt82p33.c
279
idt82p33->event_channel[index] = channel;
drivers/ptp/ptp_idt82p33.c
280
idt82p33->extts_single_shot = is_one_shot(idt82p33->extts_mask);
drivers/ptp/ptp_idt82p33.c
285
schedule_delayed_work(&idt82p33->extts_work,
drivers/ptp/ptp_idt82p33.c
289
idt82p33->extts_mask &= ~mask;
drivers/ptp/ptp_idt82p33.c
290
idt82p33->extts_single_shot = is_one_shot(idt82p33->extts_mask);
drivers/ptp/ptp_idt82p33.c
292
if (idt82p33->extts_mask == 0)
drivers/ptp/ptp_idt82p33.c
293
cancel_delayed_work(&idt82p33->extts_work);
drivers/ptp/ptp_idt82p33.c
299
static int idt82p33_extts_check_channel(struct idt82p33 *idt82p33, u8 todn)
drivers/ptp/ptp_idt82p33.c
306
err = idt82p33_get_extts(&idt82p33->channel[todn], &ts);
drivers/ptp/ptp_idt82p33.c
308
event_channel = idt82p33->event_channel[todn];
drivers/ptp/ptp_idt82p33.c
321
struct idt82p33 *idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
331
cancel_delayed_work_sync(&idt82p33->extts_work);
drivers/ptp/ptp_idt82p33.c
340
err = arm_tod_read_with_trigger(&idt82p33->channel[i], trigger);
drivers/ptp/ptp_idt82p33.c
342
dev_err(idt82p33->dev,
drivers/ptp/ptp_idt82p33.c
346
err = idt82p33_extts_check_channel(idt82p33, i);
drivers/ptp/ptp_idt82p33.c
347
if (err == 0 && idt82p33->extts_single_shot)
drivers/ptp/ptp_idt82p33.c
354
schedule_delayed_work(&idt82p33->extts_work,
drivers/ptp/ptp_idt82p33.c
363
struct idt82p33 *idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
364
u8 old_mask = idt82p33->extts_mask;
drivers/ptp/ptp_idt82p33.c
380
if (idt82p33->calculate_overhead_flag)
drivers/ptp/ptp_idt82p33.c
381
idt82p33->start_time = ktime_get_raw();
drivers/ptp/ptp_idt82p33.c
383
err = idt82p33_read(idt82p33, channel->dpll_tod_sts, buf, sizeof(buf));
drivers/ptp/ptp_idt82p33.c
406
struct idt82p33 *idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
420
if (idt82p33->calculate_overhead_flag) {
drivers/ptp/ptp_idt82p33.c
422
- ktime_to_ns(idt82p33->start_time);
drivers/ptp/ptp_idt82p33.c
426
idt82p33->calculate_overhead_flag = 0;
drivers/ptp/ptp_idt82p33.c
43
static inline int idt82p33_read(struct idt82p33 *idt82p33, u16 regaddr,
drivers/ptp/ptp_idt82p33.c
435
err = idt82p33_write(idt82p33, channel->dpll_tod_cnfg + i,
drivers/ptp/ptp_idt82p33.c
447
struct idt82p33 *idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
452
idt82p33->calculate_overhead_flag = 1;
drivers/ptp/ptp_idt82p33.c
46
return regmap_bulk_read(idt82p33->regmap, regaddr, buf, count);
drivers/ptp/ptp_idt82p33.c
460
now_ns += delta_ns + idt82p33->tod_write_overhead_ns;
drivers/ptp/ptp_idt82p33.c
472
struct idt82p33 *idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
49
static inline int idt82p33_write(struct idt82p33 *idt82p33, u16 regaddr,
drivers/ptp/ptp_idt82p33.c
498
err = idt82p33_write(idt82p33, channel->dpll_tod_cnfg, buf, sizeof(buf));
drivers/ptp/ptp_idt82p33.c
515
struct idt82p33 *idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
517
mutex_lock(idt82p33->lock);
drivers/ptp/ptp_idt82p33.c
52
return regmap_bulk_write(idt82p33->regmap, regaddr, buf, count);
drivers/ptp/ptp_idt82p33.c
520
mutex_unlock(idt82p33->lock);
drivers/ptp/ptp_idt82p33.c
525
struct idt82p33 *idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
557
err = idt82p33_write(idt82p33, channel->dpll_freq_cnfg,
drivers/ptp/ptp_idt82p33.c
629
struct idt82p33 *idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
643
err = idt82p33_write(idt82p33, channel->dpll_tod_trigger,
drivers/ptp/ptp_idt82p33.c
662
struct idt82p33 *idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
676
err = idt82p33_read(idt82p33, channel->dpll_tod_trigger,
drivers/ptp/ptp_idt82p33.c
695
struct idt82p33 *idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
703
idt82p33->tod_write_overhead_ns = 0;
drivers/ptp/ptp_idt82p33.c
711
err = idt82p33_write(idt82p33,
drivers/ptp/ptp_idt82p33.c
723
idt82p33->tod_write_overhead_ns = div_s64(total_ns,
drivers/ptp/ptp_idt82p33.c
754
struct idt82p33 *idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
757
idt82p33->tod_write_overhead_ns = 0;
drivers/ptp/ptp_idt82p33.c
762
dev_err(idt82p33->dev,
drivers/ptp/ptp_idt82p33.c
787
idt82p33->tod_write_overhead_ns -= trailing_overhead_ns;
drivers/ptp/ptp_idt82p33.c
792
static int idt82p33_check_and_set_masks(struct idt82p33 *idt82p33,
drivers/ptp/ptp_idt82p33.c
801
dev_err(idt82p33->dev,
drivers/ptp/ptp_idt82p33.c
805
idt82p33->pll_mask = val;
drivers/ptp/ptp_idt82p33.c
809
idt82p33->channel[0].output_mask = val;
drivers/ptp/ptp_idt82p33.c
812
idt82p33->channel[1].output_mask = val;
drivers/ptp/ptp_idt82p33.c
818
static void idt82p33_display_masks(struct idt82p33 *idt82p33)
drivers/ptp/ptp_idt82p33.c
822
dev_info(idt82p33->dev,
drivers/ptp/ptp_idt82p33.c
823
"pllmask = 0x%02x\n", idt82p33->pll_mask);
drivers/ptp/ptp_idt82p33.c
828
if (mask & idt82p33->pll_mask)
drivers/ptp/ptp_idt82p33.c
829
dev_info(idt82p33->dev,
drivers/ptp/ptp_idt82p33.c
831
i, idt82p33->channel[i].output_mask);
drivers/ptp/ptp_idt82p33.c
837
struct idt82p33 *idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
841
err = idt82p33_read(idt82p33, channel->dpll_sync_cnfg,
drivers/ptp/ptp_idt82p33.c
850
return idt82p33_write(idt82p33, channel->dpll_sync_cnfg,
drivers/ptp/ptp_idt82p33.c
858
struct idt82p33 *idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
860
mutex_lock(idt82p33->lock);
drivers/ptp/ptp_idt82p33.c
862
mutex_unlock(idt82p33->lock);
drivers/ptp/ptp_idt82p33.c
871
struct idt82p33 *idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
875
err = idt82p33_read(idt82p33, OUT_MUX_CNFG(outn), &val, sizeof(val));
drivers/ptp/ptp_idt82p33.c
883
return idt82p33_write(idt82p33, OUT_MUX_CNFG(outn), &val, sizeof(val));
drivers/ptp/ptp_idt82p33.c
896
struct idt82p33 *idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
903
dev_err(idt82p33->dev,
drivers/ptp/ptp_idt82p33.c
916
static void idt82p33_ptp_clock_unregister_all(struct idt82p33 *idt82p33)
drivers/ptp/ptp_idt82p33.c
922
channel = &idt82p33->channel[i];
drivers/ptp/ptp_idt82p33.c
936
struct idt82p33 *idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
939
mutex_lock(idt82p33->lock);
drivers/ptp/ptp_idt82p33.c
961
mutex_unlock(idt82p33->lock);
drivers/ptp/ptp_idt82p33.c
964
dev_err(idt82p33->dev,
drivers/ptp/ptp_idt82p33.c
978
struct idt82p33 *idt82p33 = channel->idt82p33;
drivers/ptp/ptp_idt82p33.c
993
mutex_lock(idt82p33->lock);
drivers/ptp/ptp_idt82p33.c
997
dev_err(idt82p33->dev,
drivers/ptp/ptp_idt82p33.h
62
struct idt82p33 *idt82p33;