Lines Matching full:bp
264 struct ptp_ocp *bp; member
398 int (*setup)(struct ptp_ocp *bp, struct ocp_resource *r);
404 static int ptp_ocp_register_mem(struct ptp_ocp *bp, struct ocp_resource *r);
405 static int ptp_ocp_register_i2c(struct ptp_ocp *bp, struct ocp_resource *r);
406 static int ptp_ocp_register_spi(struct ptp_ocp *bp, struct ocp_resource *r);
407 static int ptp_ocp_register_serial(struct ptp_ocp *bp, struct ocp_resource *r);
408 static int ptp_ocp_register_ext(struct ptp_ocp *bp, struct ocp_resource *r);
409 static int ptp_ocp_fb_board_init(struct ptp_ocp *bp, struct ocp_resource *r);
413 static int ptp_ocp_signal_from_perout(struct ptp_ocp *bp, int gen,
416 static int ptp_ocp_sma_store(struct ptp_ocp *bp, const char *buf, int sma_nr);
418 static int ptp_ocp_art_board_init(struct ptp_ocp *bp, struct ocp_resource *r);
420 static int ptp_ocp_adva_board_init(struct ptp_ocp *bp, struct ocp_resource *r);
440 #define BP_MAP_ENTRY_ADDR(bp, map) ({ \ argument
441 (void *)((uintptr_t)(bp) + (map)->bp_offset); \
456 #define bp_assign_entry(bp, res, val) ({ \ argument
457 uintptr_t addr = (uintptr_t)(bp) + (res)->bp_offset; \
1141 void (*init)(struct ptp_ocp *bp);
1142 u32 (*get)(struct ptp_ocp *bp, int sma_nr);
1143 int (*set_inputs)(struct ptp_ocp *bp, int sma_nr, u32 val);
1144 int (*set_output)(struct ptp_ocp *bp, int sma_nr, u32 val);
1148 ptp_ocp_sma_init(struct ptp_ocp *bp) in ptp_ocp_sma_init() argument
1150 return bp->sma_op->init(bp); in ptp_ocp_sma_init()
1154 ptp_ocp_sma_get(struct ptp_ocp *bp, int sma_nr) in ptp_ocp_sma_get() argument
1156 return bp->sma_op->get(bp, sma_nr); in ptp_ocp_sma_get()
1160 ptp_ocp_sma_set_inputs(struct ptp_ocp *bp, int sma_nr, u32 val) in ptp_ocp_sma_set_inputs() argument
1162 return bp->sma_op->set_inputs(bp, sma_nr, val); in ptp_ocp_sma_set_inputs()
1166 ptp_ocp_sma_set_output(struct ptp_ocp *bp, int sma_nr, u32 val) in ptp_ocp_sma_set_output() argument
1168 return bp->sma_op->set_output(bp, sma_nr, val); in ptp_ocp_sma_set_output()
1212 __ptp_ocp_gettime_locked(struct ptp_ocp *bp, struct timespec64 *ts, in __ptp_ocp_gettime_locked() argument
1221 iowrite32(ctrl, &bp->reg->ctrl); in __ptp_ocp_gettime_locked()
1224 ctrl = ioread32(&bp->reg->ctrl); in __ptp_ocp_gettime_locked()
1230 if (sts && bp->ts_window_adjust) { in __ptp_ocp_gettime_locked()
1233 sts->post_ts = ns_to_timespec64(ns - bp->ts_window_adjust); in __ptp_ocp_gettime_locked()
1236 time_ns = ioread32(&bp->reg->time_ns); in __ptp_ocp_gettime_locked()
1237 time_sec = ioread32(&bp->reg->time_sec); in __ptp_ocp_gettime_locked()
1249 struct ptp_ocp *bp = container_of(ptp_info, struct ptp_ocp, ptp_info); in ptp_ocp_gettimex() local
1253 spin_lock_irqsave(&bp->lock, flags); in ptp_ocp_gettimex()
1254 err = __ptp_ocp_gettime_locked(bp, ts, sts); in ptp_ocp_gettimex()
1255 spin_unlock_irqrestore(&bp->lock, flags); in ptp_ocp_gettimex()
1261 __ptp_ocp_settime_locked(struct ptp_ocp *bp, const struct timespec64 *ts) in __ptp_ocp_settime_locked() argument
1269 select = ioread32(&bp->reg->select); in __ptp_ocp_settime_locked()
1270 iowrite32(OCP_SELECT_CLK_REG, &bp->reg->select); in __ptp_ocp_settime_locked()
1272 iowrite32(time_ns, &bp->reg->adjust_ns); in __ptp_ocp_settime_locked()
1273 iowrite32(time_sec, &bp->reg->adjust_sec); in __ptp_ocp_settime_locked()
1276 iowrite32(ctrl, &bp->reg->ctrl); in __ptp_ocp_settime_locked()
1279 iowrite32(select >> 16, &bp->reg->select); in __ptp_ocp_settime_locked()
1285 struct ptp_ocp *bp = container_of(ptp_info, struct ptp_ocp, ptp_info); in ptp_ocp_settime() local
1288 spin_lock_irqsave(&bp->lock, flags); in ptp_ocp_settime()
1289 __ptp_ocp_settime_locked(bp, ts); in ptp_ocp_settime()
1290 spin_unlock_irqrestore(&bp->lock, flags); in ptp_ocp_settime()
1296 __ptp_ocp_adjtime_locked(struct ptp_ocp *bp, u32 adj_val) in __ptp_ocp_adjtime_locked() argument
1300 select = ioread32(&bp->reg->select); in __ptp_ocp_adjtime_locked()
1301 iowrite32(OCP_SELECT_CLK_REG, &bp->reg->select); in __ptp_ocp_adjtime_locked()
1303 iowrite32(adj_val, &bp->reg->offset_ns); in __ptp_ocp_adjtime_locked()
1304 iowrite32(NSEC_PER_SEC, &bp->reg->offset_window_ns); in __ptp_ocp_adjtime_locked()
1307 iowrite32(ctrl, &bp->reg->ctrl); in __ptp_ocp_adjtime_locked()
1310 iowrite32(select >> 16, &bp->reg->select); in __ptp_ocp_adjtime_locked()
1314 ptp_ocp_adjtime_coarse(struct ptp_ocp *bp, s64 delta_ns) in ptp_ocp_adjtime_coarse() argument
1320 spin_lock_irqsave(&bp->lock, flags); in ptp_ocp_adjtime_coarse()
1321 err = __ptp_ocp_gettime_locked(bp, &ts, NULL); in ptp_ocp_adjtime_coarse()
1325 __ptp_ocp_settime_locked(bp, &ts); in ptp_ocp_adjtime_coarse()
1327 spin_unlock_irqrestore(&bp->lock, flags); in ptp_ocp_adjtime_coarse()
1333 struct ptp_ocp *bp = container_of(ptp_info, struct ptp_ocp, ptp_info); in ptp_ocp_adjtime() local
1338 ptp_ocp_adjtime_coarse(bp, delta_ns); in ptp_ocp_adjtime()
1345 spin_lock_irqsave(&bp->lock, flags); in ptp_ocp_adjtime()
1346 __ptp_ocp_adjtime_locked(bp, sign | adj_ns); in ptp_ocp_adjtime()
1347 spin_unlock_irqrestore(&bp->lock, flags); in ptp_ocp_adjtime()
1377 struct ptp_ocp *bp = container_of(ptp_info, struct ptp_ocp, ptp_info); in ptp_ocp_enable() local
1387 ext = bp->ts0; in ptp_ocp_enable()
1390 ext = bp->ts1; in ptp_ocp_enable()
1393 ext = bp->ts2; in ptp_ocp_enable()
1396 ext = bp->ts3; in ptp_ocp_enable()
1399 ext = bp->ts4; in ptp_ocp_enable()
1402 ext = bp->pps; in ptp_ocp_enable()
1408 ext = bp->pps; in ptp_ocp_enable()
1425 ext = bp->signal_out[req]; in ptp_ocp_enable()
1426 err = ptp_ocp_signal_from_perout(bp, req, &rq->perout); in ptp_ocp_enable()
1447 struct ptp_ocp *bp = container_of(ptp_info, struct ptp_ocp, ptp_info); in ptp_ocp_verify() local
1470 return ptp_ocp_sma_store(bp, buf, pin + 1); in ptp_ocp_verify()
1491 __ptp_ocp_clear_drift_locked(struct ptp_ocp *bp) in __ptp_ocp_clear_drift_locked() argument
1495 select = ioread32(&bp->reg->select); in __ptp_ocp_clear_drift_locked()
1496 iowrite32(OCP_SELECT_CLK_REG, &bp->reg->select); in __ptp_ocp_clear_drift_locked()
1498 iowrite32(0, &bp->reg->drift_ns); in __ptp_ocp_clear_drift_locked()
1501 iowrite32(ctrl, &bp->reg->ctrl); in __ptp_ocp_clear_drift_locked()
1504 iowrite32(select >> 16, &bp->reg->select); in __ptp_ocp_clear_drift_locked()
1508 ptp_ocp_utc_distribute(struct ptp_ocp *bp, u32 val) in ptp_ocp_utc_distribute() argument
1512 spin_lock_irqsave(&bp->lock, flags); in ptp_ocp_utc_distribute()
1514 bp->utc_tai_offset = val; in ptp_ocp_utc_distribute()
1516 if (bp->irig_out) in ptp_ocp_utc_distribute()
1517 iowrite32(val, &bp->irig_out->adj_sec); in ptp_ocp_utc_distribute()
1518 if (bp->dcf_out) in ptp_ocp_utc_distribute()
1519 iowrite32(val, &bp->dcf_out->adj_sec); in ptp_ocp_utc_distribute()
1520 if (bp->nmea_out) in ptp_ocp_utc_distribute()
1521 iowrite32(val, &bp->nmea_out->adj_sec); in ptp_ocp_utc_distribute()
1523 spin_unlock_irqrestore(&bp->lock, flags); in ptp_ocp_utc_distribute()
1529 struct ptp_ocp *bp = timer_container_of(bp, t, watchdog); in ptp_ocp_watchdog() local
1533 status = ioread32(&bp->pps_to_clk->status); in ptp_ocp_watchdog()
1536 iowrite32(status, &bp->pps_to_clk->status); in ptp_ocp_watchdog()
1537 if (!bp->gnss_lost) { in ptp_ocp_watchdog()
1538 spin_lock_irqsave(&bp->lock, flags); in ptp_ocp_watchdog()
1539 __ptp_ocp_clear_drift_locked(bp); in ptp_ocp_watchdog()
1540 spin_unlock_irqrestore(&bp->lock, flags); in ptp_ocp_watchdog()
1541 bp->gnss_lost = ktime_get_real_seconds(); in ptp_ocp_watchdog()
1544 } else if (bp->gnss_lost) { in ptp_ocp_watchdog()
1545 bp->gnss_lost = 0; in ptp_ocp_watchdog()
1551 if (bp->tod) { in ptp_ocp_watchdog()
1552 status = ioread32(&bp->tod->utc_status); in ptp_ocp_watchdog()
1555 utc_offset != bp->utc_tai_offset) in ptp_ocp_watchdog()
1556 ptp_ocp_utc_distribute(bp, utc_offset); in ptp_ocp_watchdog()
1559 mod_timer(&bp->watchdog, jiffies + HZ); in ptp_ocp_watchdog()
1563 ptp_ocp_estimate_pci_timing(struct ptp_ocp *bp) in ptp_ocp_estimate_pci_timing() argument
1570 ctrl = ioread32(&bp->reg->ctrl); in ptp_ocp_estimate_pci_timing()
1573 iowrite32(ctrl, &bp->reg->ctrl); in ptp_ocp_estimate_pci_timing()
1577 ctrl = ioread32(&bp->reg->ctrl); in ptp_ocp_estimate_pci_timing()
1583 bp->ts_window_adjust = (delay >> 5) * 3; in ptp_ocp_estimate_pci_timing()
1587 ptp_ocp_init_clock(struct ptp_ocp *bp, struct ptp_ocp_servo_conf *servo_conf) in ptp_ocp_init_clock() argument
1593 iowrite32(ctrl, &bp->reg->ctrl); in ptp_ocp_init_clock()
1596 iowrite32(servo_conf->servo_offset_p, &bp->reg->servo_offset_p); in ptp_ocp_init_clock()
1597 iowrite32(servo_conf->servo_offset_i, &bp->reg->servo_offset_i); in ptp_ocp_init_clock()
1598 iowrite32(servo_conf->servo_drift_p, &bp->reg->servo_drift_p); in ptp_ocp_init_clock()
1599 iowrite32(servo_conf->servo_drift_p, &bp->reg->servo_drift_i); in ptp_ocp_init_clock()
1603 iowrite32(ctrl, &bp->reg->ctrl); in ptp_ocp_init_clock()
1605 if ((ioread32(&bp->reg->ctrl) & OCP_CTRL_ENABLE) == 0) { in ptp_ocp_init_clock()
1606 dev_err(&bp->pdev->dev, "clock not enabled\n"); in ptp_ocp_init_clock()
1610 ptp_ocp_estimate_pci_timing(bp); in ptp_ocp_init_clock()
1612 bp->sync = ioread32(&bp->reg->status) & OCP_STATUS_IN_SYNC; in ptp_ocp_init_clock()
1613 if (!bp->sync) { in ptp_ocp_init_clock()
1615 ptp_ocp_settime(&bp->ptp_info, &ts); in ptp_ocp_init_clock()
1619 if (bp->pps_to_clk) { in ptp_ocp_init_clock()
1620 timer_setup(&bp->watchdog, ptp_ocp_watchdog, 0); in ptp_ocp_init_clock()
1621 mod_timer(&bp->watchdog, jiffies + HZ); in ptp_ocp_init_clock()
1628 ptp_ocp_tod_init(struct ptp_ocp *bp) in ptp_ocp_tod_init() argument
1632 ctrl = ioread32(&bp->tod->ctrl); in ptp_ocp_tod_init()
1635 iowrite32(ctrl, &bp->tod->ctrl); in ptp_ocp_tod_init()
1637 reg = ioread32(&bp->tod->utc_status); in ptp_ocp_tod_init()
1639 ptp_ocp_utc_distribute(bp, reg & TOD_STATUS_UTC_MASK); in ptp_ocp_tod_init()
1674 struct ptp_ocp *bp; member
1689 return info->bp == dev_get_drvdata(dev); in ptp_ocp_nvmem_match()
1694 ptp_ocp_nvmem_device_get(struct ptp_ocp *bp, const void * const tag) in ptp_ocp_nvmem_device_get() argument
1696 struct ptp_ocp_nvmem_match_info info = { .bp = bp, .tag = tag }; in ptp_ocp_nvmem_device_get()
1710 ptp_ocp_read_eeprom(struct ptp_ocp *bp) in ptp_ocp_read_eeprom() argument
1717 if (!bp->i2c_ctrl) in ptp_ocp_read_eeprom()
1723 for (map = bp->eeprom_map; map->len; map++) { in ptp_ocp_read_eeprom()
1729 nvmem = ptp_ocp_nvmem_device_get(bp, tag); in ptp_ocp_read_eeprom()
1736 BP_MAP_ENTRY_ADDR(bp, map)); in ptp_ocp_read_eeprom()
1741 bp->has_eeprom_data = true; in ptp_ocp_read_eeprom()
1748 dev_err(&bp->pdev->dev, "could not read eeprom: %d\n", ret); in ptp_ocp_read_eeprom()
1753 ptp_ocp_find_flash(struct ptp_ocp *bp) in ptp_ocp_find_flash() argument
1758 dev = &bp->spi_flash->dev; in ptp_ocp_find_flash()
1775 struct ptp_ocp *bp = devlink_priv(devlink); in ptp_ocp_devlink_fw_image() local
1788 if (be16_to_cpu(hdr->pci_vendor_id) != bp->pdev->vendor || in ptp_ocp_devlink_fw_image()
1789 be16_to_cpu(hdr->pci_device_id) != bp->pdev->device) { in ptp_ocp_devlink_fw_image()
1824 struct ptp_ocp *bp = devlink_priv(devlink); in ptp_ocp_devlink_flash() local
1836 base = bp->flash_start; in ptp_ocp_devlink_flash()
1868 struct ptp_ocp *bp = devlink_priv(devlink); in ptp_ocp_devlink_flash_update() local
1873 dev = ptp_ocp_find_flash(bp); in ptp_ocp_devlink_flash_update()
1875 dev_err(&bp->pdev->dev, "Can't find Flash SPI adapter\n"); in ptp_ocp_devlink_flash_update()
1895 struct ptp_ocp *bp = devlink_priv(devlink); in ptp_ocp_devlink_info_get() local
1900 fw_image = bp->fw_loader ? "loader" : "fw"; in ptp_ocp_devlink_info_get()
1901 sprintf(buf, "%d.%d", bp->fw_tag, bp->fw_version); in ptp_ocp_devlink_info_get()
1906 if (!bp->has_eeprom_data) { in ptp_ocp_devlink_info_get()
1907 ptp_ocp_read_eeprom(bp); in ptp_ocp_devlink_info_get()
1908 if (!bp->has_eeprom_data) in ptp_ocp_devlink_info_get()
1912 sprintf(buf, "%pM", bp->serial); in ptp_ocp_devlink_info_get()
1919 bp->board_id); in ptp_ocp_devlink_info_get()
1932 __ptp_ocp_get_mem(struct ptp_ocp *bp, resource_size_t start, int size) in __ptp_ocp_get_mem() argument
1936 return devm_ioremap_resource(&bp->pdev->dev, &res); in __ptp_ocp_get_mem()
1940 ptp_ocp_get_mem(struct ptp_ocp *bp, struct ocp_resource *r) in ptp_ocp_get_mem() argument
1944 start = pci_resource_start(bp->pdev, 0) + r->offset; in ptp_ocp_get_mem()
1945 return __ptp_ocp_get_mem(bp, start, r->size); in ptp_ocp_get_mem()
1949 ptp_ocp_register_spi(struct ptp_ocp *bp, struct ocp_resource *r) in ptp_ocp_register_spi() argument
1952 struct pci_dev *pdev = bp->pdev; in ptp_ocp_register_spi()
1972 bp_assign_entry(bp, r, p); in ptp_ocp_register_spi()
1995 ptp_ocp_register_i2c(struct ptp_ocp *bp, struct ocp_resource *r) in ptp_ocp_register_i2c() argument
1997 struct pci_dev *pdev = bp->pdev; in ptp_ocp_register_i2c()
2005 id = pci_dev_id(bp->pdev); in ptp_ocp_register_i2c()
2012 bp->i2c_clk = clk; in ptp_ocp_register_i2c()
2016 p = ptp_ocp_i2c_bus(bp->pdev, r, id); in ptp_ocp_register_i2c()
2020 bp_assign_entry(bp, r, p); in ptp_ocp_register_i2c()
2031 struct ptp_ocp *bp = ext->bp; in ptp_ocp_signal_irq() local
2044 bp->signal[gen].running = false; in ptp_ocp_signal_irq()
2053 ptp_ocp_signal_set(struct ptp_ocp *bp, int gen, struct ptp_ocp_signal *s) in ptp_ocp_signal_set() argument
2066 err = ptp_ocp_gettimex(&bp->ptp_info, &ts, &sts); in ptp_ocp_signal_set()
2087 bp->signal[gen] = *s; in ptp_ocp_signal_set()
2093 ptp_ocp_signal_from_perout(struct ptp_ocp *bp, int gen, in ptp_ocp_signal_from_perout() argument
2102 s.polarity = bp->signal[gen].polarity; in ptp_ocp_signal_from_perout()
2117 return ptp_ocp_signal_set(bp, gen, &s); in ptp_ocp_signal_from_perout()
2125 struct ptp_ocp *bp = ext->bp; in ptp_ocp_signal_enable() local
2133 bp->signal[gen].running = false; in ptp_ocp_signal_enable()
2137 ts = ktime_to_timespec64(bp->signal[gen].start); in ptp_ocp_signal_enable()
2141 ts = ktime_to_timespec64(bp->signal[gen].period); in ptp_ocp_signal_enable()
2145 ts = ktime_to_timespec64(bp->signal[gen].pulse); in ptp_ocp_signal_enable()
2149 iowrite32(bp->signal[gen].polarity, ®->polarity); in ptp_ocp_signal_enable()
2156 bp->signal[gen].running = true; in ptp_ocp_signal_enable()
2169 if (ext == ext->bp->pps) { in ptp_ocp_ts_irq()
2170 if (ext->bp->pps_req_map & OCP_REQ_PPS) { in ptp_ocp_ts_irq()
2172 ptp_clock_event(ext->bp->ptp, &ev); in ptp_ocp_ts_irq()
2175 if ((ext->bp->pps_req_map & ~OCP_REQ_PPS) == 0) in ptp_ocp_ts_irq()
2187 ptp_clock_event(ext->bp->ptp, &ev); in ptp_ocp_ts_irq()
2200 struct ptp_ocp *bp = ext->bp; in ptp_ocp_ts_enable() local
2202 if (ext == bp->pps) { in ptp_ocp_ts_enable()
2203 u32 old_map = bp->pps_req_map; in ptp_ocp_ts_enable()
2206 bp->pps_req_map |= req; in ptp_ocp_ts_enable()
2208 bp->pps_req_map &= ~req; in ptp_ocp_ts_enable()
2211 if ((!!old_map ^ !!bp->pps_req_map) == 0) in ptp_ocp_ts_enable()
2231 pci_free_irq(ext->bp->pdev, ext->irq_vec, ext); in ptp_ocp_unregister_ext()
2236 ptp_ocp_register_ext(struct ptp_ocp *bp, struct ocp_resource *r) in ptp_ocp_register_ext() argument
2238 struct pci_dev *pdev = bp->pdev; in ptp_ocp_register_ext()
2246 ext->mem = ptp_ocp_get_mem(bp, r); in ptp_ocp_register_ext()
2252 ext->bp = bp; in ptp_ocp_register_ext()
2257 ext, "ocp%d.%s", bp->id, r->name); in ptp_ocp_register_ext()
2263 bp_assign_entry(bp, r, ext); in ptp_ocp_register_ext()
2273 ptp_ocp_serial_line(struct ptp_ocp *bp, struct ocp_resource *r) in ptp_ocp_serial_line() argument
2275 struct pci_dev *pdev = bp->pdev; in ptp_ocp_serial_line()
2295 ptp_ocp_register_serial(struct ptp_ocp *bp, struct ocp_resource *r) in ptp_ocp_register_serial() argument
2300 port.line = ptp_ocp_serial_line(bp, r); in ptp_ocp_register_serial()
2307 bp_assign_entry(bp, r, port); in ptp_ocp_register_serial()
2313 ptp_ocp_register_mem(struct ptp_ocp *bp, struct ocp_resource *r) in ptp_ocp_register_mem() argument
2317 mem = ptp_ocp_get_mem(bp, r); in ptp_ocp_register_mem()
2321 bp_assign_entry(bp, r, mem); in ptp_ocp_register_mem()
2327 ptp_ocp_nmea_out_init(struct ptp_ocp *bp) in ptp_ocp_nmea_out_init() argument
2329 if (!bp->nmea_out) in ptp_ocp_nmea_out_init()
2332 iowrite32(0, &bp->nmea_out->ctrl); /* disable */ in ptp_ocp_nmea_out_init()
2333 iowrite32(7, &bp->nmea_out->uart_baud); /* 115200 */ in ptp_ocp_nmea_out_init()
2334 iowrite32(1, &bp->nmea_out->ctrl); /* enable */ in ptp_ocp_nmea_out_init()
2350 ptp_ocp_signal_init(struct ptp_ocp *bp) in ptp_ocp_signal_init() argument
2355 if (bp->signal_out[i]) in ptp_ocp_signal_init()
2356 _ptp_ocp_signal_init(&bp->signal[i], in ptp_ocp_signal_init()
2357 bp->signal_out[i]->mem); in ptp_ocp_signal_init()
2361 ptp_ocp_attr_group_del(struct ptp_ocp *bp) in ptp_ocp_attr_group_del() argument
2363 sysfs_remove_groups(&bp->dev.kobj, bp->attr_group); in ptp_ocp_attr_group_del()
2364 kfree(bp->attr_group); in ptp_ocp_attr_group_del()
2368 ptp_ocp_attr_group_add(struct ptp_ocp *bp, in ptp_ocp_attr_group_add() argument
2376 if (attr_tbl[i].cap & bp->fw_cap) in ptp_ocp_attr_group_add()
2379 bp->attr_group = kcalloc(count + 1, sizeof(*bp->attr_group), in ptp_ocp_attr_group_add()
2381 if (!bp->attr_group) in ptp_ocp_attr_group_add()
2386 if (attr_tbl[i].cap & bp->fw_cap) in ptp_ocp_attr_group_add()
2387 bp->attr_group[count++] = attr_tbl[i].group; in ptp_ocp_attr_group_add()
2389 err = sysfs_create_groups(&bp->dev.kobj, bp->attr_group); in ptp_ocp_attr_group_add()
2391 bp->attr_group[0] = NULL; in ptp_ocp_attr_group_add()
2412 ptp_ocp_irig_out(struct ptp_ocp *bp, bool enable) in ptp_ocp_irig_out() argument
2414 return ptp_ocp_enable_fpga(&bp->irig_out->ctrl, in ptp_ocp_irig_out()
2419 ptp_ocp_irig_in(struct ptp_ocp *bp, bool enable) in ptp_ocp_irig_in() argument
2421 return ptp_ocp_enable_fpga(&bp->irig_in->ctrl, in ptp_ocp_irig_in()
2426 ptp_ocp_dcf_out(struct ptp_ocp *bp, bool enable) in ptp_ocp_dcf_out() argument
2428 return ptp_ocp_enable_fpga(&bp->dcf_out->ctrl, in ptp_ocp_dcf_out()
2433 ptp_ocp_dcf_in(struct ptp_ocp *bp, bool enable) in ptp_ocp_dcf_in() argument
2435 return ptp_ocp_enable_fpga(&bp->dcf_in->ctrl, in ptp_ocp_dcf_in()
2440 __handle_signal_outputs(struct ptp_ocp *bp, u32 val) in __handle_signal_outputs() argument
2442 ptp_ocp_irig_out(bp, val & 0x00100010); in __handle_signal_outputs()
2443 ptp_ocp_dcf_out(bp, val & 0x00200020); in __handle_signal_outputs()
2447 __handle_signal_inputs(struct ptp_ocp *bp, u32 val) in __handle_signal_inputs() argument
2449 ptp_ocp_irig_in(bp, val & 0x00100010); in __handle_signal_inputs()
2450 ptp_ocp_dcf_in(bp, val & 0x00200020); in __handle_signal_inputs()
2454 ptp_ocp_sma_fb_get(struct ptp_ocp *bp, int sma_nr) in ptp_ocp_sma_fb_get() argument
2459 if (bp->sma[sma_nr - 1].fixed_fcn) in ptp_ocp_sma_fb_get()
2462 if (bp->sma[sma_nr - 1].mode == SMA_MODE_IN) in ptp_ocp_sma_fb_get()
2463 gpio = sma_nr > 2 ? &bp->sma_map2->gpio1 : &bp->sma_map1->gpio1; in ptp_ocp_sma_fb_get()
2465 gpio = sma_nr > 2 ? &bp->sma_map1->gpio2 : &bp->sma_map2->gpio2; in ptp_ocp_sma_fb_get()
2472 ptp_ocp_sma_fb_set_output(struct ptp_ocp *bp, int sma_nr, u32 val) in ptp_ocp_sma_fb_set_output() argument
2478 gpio = sma_nr > 2 ? &bp->sma_map1->gpio2 : &bp->sma_map2->gpio2; in ptp_ocp_sma_fb_set_output()
2483 spin_lock_irqsave(&bp->lock, flags); in ptp_ocp_sma_fb_set_output()
2488 __handle_signal_outputs(bp, reg); in ptp_ocp_sma_fb_set_output()
2492 spin_unlock_irqrestore(&bp->lock, flags); in ptp_ocp_sma_fb_set_output()
2498 ptp_ocp_sma_fb_set_inputs(struct ptp_ocp *bp, int sma_nr, u32 val) in ptp_ocp_sma_fb_set_inputs() argument
2504 gpio = sma_nr > 2 ? &bp->sma_map2->gpio1 : &bp->sma_map1->gpio1; in ptp_ocp_sma_fb_set_inputs()
2509 spin_lock_irqsave(&bp->lock, flags); in ptp_ocp_sma_fb_set_inputs()
2514 __handle_signal_inputs(bp, reg); in ptp_ocp_sma_fb_set_inputs()
2518 spin_unlock_irqrestore(&bp->lock, flags); in ptp_ocp_sma_fb_set_inputs()
2524 ptp_ocp_sma_fb_init(struct ptp_ocp *bp) in ptp_ocp_sma_fb_init() argument
2539 bp->sma[i].default_fcn = i & 1; in ptp_ocp_sma_fb_init()
2540 bp->sma[i].dpll_prop = prop; in ptp_ocp_sma_fb_init()
2541 bp->sma[i].dpll_prop.board_label = in ptp_ocp_sma_fb_init()
2542 bp->ptp_info.pin_config[i].name; in ptp_ocp_sma_fb_init()
2544 bp->sma[0].mode = SMA_MODE_IN; in ptp_ocp_sma_fb_init()
2545 bp->sma[1].mode = SMA_MODE_IN; in ptp_ocp_sma_fb_init()
2546 bp->sma[2].mode = SMA_MODE_OUT; in ptp_ocp_sma_fb_init()
2547 bp->sma[3].mode = SMA_MODE_OUT; in ptp_ocp_sma_fb_init()
2549 if (!bp->sma_map1) { in ptp_ocp_sma_fb_init()
2551 bp->sma[i].fixed_fcn = true; in ptp_ocp_sma_fb_init()
2552 bp->sma[i].fixed_dir = true; in ptp_ocp_sma_fb_init()
2553 bp->sma[1].dpll_prop.capabilities &= in ptp_ocp_sma_fb_init()
2562 reg = ioread32(&bp->sma_map2->gpio2); in ptp_ocp_sma_fb_init()
2565 bp->sma[i].fixed_dir = true; in ptp_ocp_sma_fb_init()
2567 reg = ioread32(&bp->sma_map1->gpio1); in ptp_ocp_sma_fb_init()
2568 bp->sma[0].mode = reg & BIT(15) ? SMA_MODE_IN : SMA_MODE_OUT; in ptp_ocp_sma_fb_init()
2569 bp->sma[1].mode = reg & BIT(31) ? SMA_MODE_IN : SMA_MODE_OUT; in ptp_ocp_sma_fb_init()
2571 reg = ioread32(&bp->sma_map1->gpio2); in ptp_ocp_sma_fb_init()
2572 bp->sma[2].mode = reg & BIT(15) ? SMA_MODE_OUT : SMA_MODE_IN; in ptp_ocp_sma_fb_init()
2573 bp->sma[3].mode = reg & BIT(31) ? SMA_MODE_OUT : SMA_MODE_IN; in ptp_ocp_sma_fb_init()
2586 ptp_ocp_sma_adva_set_output(struct ptp_ocp *bp, int sma_nr, u32 val) in ptp_ocp_sma_adva_set_output() argument
2592 gpio = sma_nr > 2 ? &bp->sma_map1->gpio2 : &bp->sma_map2->gpio2; in ptp_ocp_sma_adva_set_output()
2597 spin_lock_irqsave(&bp->lock, flags); in ptp_ocp_sma_adva_set_output()
2604 spin_unlock_irqrestore(&bp->lock, flags); in ptp_ocp_sma_adva_set_output()
2610 ptp_ocp_sma_adva_set_inputs(struct ptp_ocp *bp, int sma_nr, u32 val) in ptp_ocp_sma_adva_set_inputs() argument
2616 gpio = sma_nr > 2 ? &bp->sma_map2->gpio1 : &bp->sma_map1->gpio1; in ptp_ocp_sma_adva_set_inputs()
2621 spin_lock_irqsave(&bp->lock, flags); in ptp_ocp_sma_adva_set_inputs()
2628 spin_unlock_irqrestore(&bp->lock, flags); in ptp_ocp_sma_adva_set_inputs()
2642 ptp_ocp_set_pins(struct ptp_ocp *bp) in ptp_ocp_set_pins() argument
2656 bp->ptp_info.n_pins = 4; in ptp_ocp_set_pins()
2657 bp->ptp_info.pin_config = config; in ptp_ocp_set_pins()
2663 ptp_ocp_fb_set_version(struct ptp_ocp *bp) in ptp_ocp_fb_set_version() argument
2668 version = ioread32(&bp->image->version); in ptp_ocp_fb_set_version()
2673 bp->fw_loader = true; in ptp_ocp_fb_set_version()
2676 bp->fw_tag = version >> 15; in ptp_ocp_fb_set_version()
2677 bp->fw_version = version & 0x7fff; in ptp_ocp_fb_set_version()
2679 if (bp->fw_tag) { in ptp_ocp_fb_set_version()
2691 bp->fw_cap = cap; in ptp_ocp_fb_set_version()
2696 ptp_ocp_fb_board_init(struct ptp_ocp *bp, struct ocp_resource *r) in ptp_ocp_fb_board_init() argument
2700 bp->flash_start = 1024 * 4096; in ptp_ocp_fb_board_init()
2701 bp->eeprom_map = fb_eeprom_map; in ptp_ocp_fb_board_init()
2702 bp->fw_version = ioread32(&bp->image->version); in ptp_ocp_fb_board_init()
2703 bp->sma_op = &ocp_fb_sma_op; in ptp_ocp_fb_board_init()
2704 bp->signals_nr = 4; in ptp_ocp_fb_board_init()
2705 bp->freq_in_nr = 4; in ptp_ocp_fb_board_init()
2707 ptp_ocp_fb_set_version(bp); in ptp_ocp_fb_board_init()
2709 ptp_ocp_tod_init(bp); in ptp_ocp_fb_board_init()
2710 ptp_ocp_nmea_out_init(bp); in ptp_ocp_fb_board_init()
2711 ptp_ocp_signal_init(bp); in ptp_ocp_fb_board_init()
2713 err = ptp_ocp_attr_group_add(bp, fb_timecard_groups); in ptp_ocp_fb_board_init()
2717 err = ptp_ocp_set_pins(bp); in ptp_ocp_fb_board_init()
2720 ptp_ocp_sma_init(bp); in ptp_ocp_fb_board_init()
2722 return ptp_ocp_init_clock(bp, r->extra); in ptp_ocp_fb_board_init()
2726 ptp_ocp_allow_irq(struct ptp_ocp *bp, struct ocp_resource *r) in ptp_ocp_allow_irq() argument
2728 bool allow = !r->irq_vec || r->irq_vec < bp->n_irqs; in ptp_ocp_allow_irq()
2731 dev_err(&bp->pdev->dev, "irq %d out of range, skipping %s\n", in ptp_ocp_allow_irq()
2737 ptp_ocp_register_resources(struct ptp_ocp *bp, kernel_ulong_t driver_data) in ptp_ocp_register_resources() argument
2744 if (!ptp_ocp_allow_irq(bp, r)) in ptp_ocp_register_resources()
2746 err = r->setup(bp, r); in ptp_ocp_register_resources()
2748 dev_err(&bp->pdev->dev, in ptp_ocp_register_resources()
2758 ptp_ocp_art_sma_init(struct ptp_ocp *bp) in ptp_ocp_art_sma_init() argument
2772 bp->sma[0].mode = SMA_MODE_IN; in ptp_ocp_art_sma_init()
2773 bp->sma[1].mode = SMA_MODE_IN; in ptp_ocp_art_sma_init()
2774 bp->sma[2].mode = SMA_MODE_OUT; in ptp_ocp_art_sma_init()
2775 bp->sma[3].mode = SMA_MODE_OUT; in ptp_ocp_art_sma_init()
2777 bp->sma[0].default_fcn = 0x08; /* IN: 10Mhz */ in ptp_ocp_art_sma_init()
2778 bp->sma[1].default_fcn = 0x01; /* IN: PPS1 */ in ptp_ocp_art_sma_init()
2779 bp->sma[2].default_fcn = 0x10; /* OUT: 10Mhz */ in ptp_ocp_art_sma_init()
2780 bp->sma[3].default_fcn = 0x02; /* OUT: PHC */ in ptp_ocp_art_sma_init()
2784 bp->sma[i].dpll_prop = prop; in ptp_ocp_art_sma_init()
2785 bp->sma[i].dpll_prop.board_label = in ptp_ocp_art_sma_init()
2786 bp->ptp_info.pin_config[i].name; in ptp_ocp_art_sma_init()
2787 if (!bp->art_sma) { in ptp_ocp_art_sma_init()
2788 bp->sma[i].fixed_fcn = true; in ptp_ocp_art_sma_init()
2789 bp->sma[i].fixed_dir = true; in ptp_ocp_art_sma_init()
2792 reg = ioread32(&bp->art_sma->map[i].gpio); in ptp_ocp_art_sma_init()
2796 bp->sma[i].fixed_fcn = true; in ptp_ocp_art_sma_init()
2797 bp->sma[i].fixed_dir = true; in ptp_ocp_art_sma_init()
2801 bp->sma[i].mode = SMA_MODE_IN; in ptp_ocp_art_sma_init()
2802 bp->sma[i].dpll_prop.capabilities = in ptp_ocp_art_sma_init()
2806 bp->sma[i].mode = SMA_MODE_OUT; in ptp_ocp_art_sma_init()
2807 bp->sma[i].dpll_prop.capabilities = in ptp_ocp_art_sma_init()
2815 ptp_ocp_art_sma_get(struct ptp_ocp *bp, int sma_nr) in ptp_ocp_art_sma_get() argument
2817 if (bp->sma[sma_nr - 1].fixed_fcn) in ptp_ocp_art_sma_get()
2818 return bp->sma[sma_nr - 1].default_fcn; in ptp_ocp_art_sma_get()
2820 return ioread32(&bp->art_sma->map[sma_nr - 1].gpio) & 0xff; in ptp_ocp_art_sma_get()
2825 ptp_ocp_art_sma_set(struct ptp_ocp *bp, int sma_nr, u32 val) in ptp_ocp_art_sma_set() argument
2836 gpio = &bp->art_sma->map[sma_nr - 1].gpio; in ptp_ocp_art_sma_set()
2838 spin_lock_irqsave(&bp->lock, flags); in ptp_ocp_art_sma_set()
2846 spin_unlock_irqrestore(&bp->lock, flags); in ptp_ocp_art_sma_set()
2861 ptp_ocp_art_board_init(struct ptp_ocp *bp, struct ocp_resource *r) in ptp_ocp_art_board_init() argument
2865 bp->flash_start = 0x1000000; in ptp_ocp_art_board_init()
2866 bp->eeprom_map = art_eeprom_map; in ptp_ocp_art_board_init()
2867 bp->fw_cap = OCP_CAP_BASIC; in ptp_ocp_art_board_init()
2868 bp->fw_version = ioread32(&bp->reg->version); in ptp_ocp_art_board_init()
2869 bp->fw_tag = 2; in ptp_ocp_art_board_init()
2870 bp->sma_op = &ocp_art_sma_op; in ptp_ocp_art_board_init()
2871 bp->signals_nr = 4; in ptp_ocp_art_board_init()
2872 bp->freq_in_nr = 4; in ptp_ocp_art_board_init()
2875 iowrite32(1, &bp->board_config->mro50_serial_activate); in ptp_ocp_art_board_init()
2877 err = ptp_ocp_set_pins(bp); in ptp_ocp_art_board_init()
2880 ptp_ocp_sma_init(bp); in ptp_ocp_art_board_init()
2882 err = ptp_ocp_attr_group_add(bp, art_timecard_groups); in ptp_ocp_art_board_init()
2886 return ptp_ocp_init_clock(bp, r->extra); in ptp_ocp_art_board_init()
2891 ptp_ocp_adva_board_init(struct ptp_ocp *bp, struct ocp_resource *r) in ptp_ocp_adva_board_init() argument
2896 bp->flash_start = 0xA00000; in ptp_ocp_adva_board_init()
2897 bp->eeprom_map = fb_eeprom_map; in ptp_ocp_adva_board_init()
2898 bp->sma_op = &ocp_adva_sma_op; in ptp_ocp_adva_board_init()
2899 bp->signals_nr = 2; in ptp_ocp_adva_board_init()
2900 bp->freq_in_nr = 2; in ptp_ocp_adva_board_init()
2902 version = ioread32(&bp->image->version); in ptp_ocp_adva_board_init()
2906 bp->fw_loader = true; in ptp_ocp_adva_board_init()
2908 bp->fw_tag = 3; in ptp_ocp_adva_board_init()
2909 bp->fw_version = version & 0xffff; in ptp_ocp_adva_board_init()
2910 bp->fw_cap = OCP_CAP_BASIC | OCP_CAP_SIGNAL | OCP_CAP_FREQ; in ptp_ocp_adva_board_init()
2912 ptp_ocp_tod_init(bp); in ptp_ocp_adva_board_init()
2913 ptp_ocp_nmea_out_init(bp); in ptp_ocp_adva_board_init()
2914 ptp_ocp_signal_init(bp); in ptp_ocp_adva_board_init()
2916 err = ptp_ocp_attr_group_add(bp, adva_timecard_groups); in ptp_ocp_adva_board_init()
2920 err = ptp_ocp_set_pins(bp); in ptp_ocp_adva_board_init()
2923 ptp_ocp_sma_init(bp); in ptp_ocp_adva_board_init()
2925 return ptp_ocp_init_clock(bp, r->extra); in ptp_ocp_adva_board_init()
3008 ptp_ocp_sma_show(struct ptp_ocp *bp, int sma_nr, char *buf, in ptp_ocp_sma_show() argument
3011 struct ptp_ocp_sma_connector *sma = &bp->sma[sma_nr - 1]; in ptp_ocp_sma_show()
3015 tbl = bp->sma_op->tbl; in ptp_ocp_sma_show()
3016 val = ptp_ocp_sma_get(bp, sma_nr) & SMA_SELECT_MASK; in ptp_ocp_sma_show()
3030 struct ptp_ocp *bp = dev_get_drvdata(dev); in sma1_show() local
3032 return ptp_ocp_sma_show(bp, 1, buf, 0, 1); in sma1_show()
3038 struct ptp_ocp *bp = dev_get_drvdata(dev); in sma2_show() local
3040 return ptp_ocp_sma_show(bp, 2, buf, -1, 1); in sma2_show()
3046 struct ptp_ocp *bp = dev_get_drvdata(dev); in sma3_show() local
3048 return ptp_ocp_sma_show(bp, 3, buf, -1, 0); in sma3_show()
3054 struct ptp_ocp *bp = dev_get_drvdata(dev); in sma4_show() local
3056 return ptp_ocp_sma_show(bp, 4, buf, -1, 1); in sma4_show()
3060 ptp_ocp_sma_store_val(struct ptp_ocp *bp, int val, enum ptp_ocp_sma_mode mode, int sma_nr) in ptp_ocp_sma_store_val() argument
3062 struct ptp_ocp_sma_connector *sma = &bp->sma[sma_nr - 1]; in ptp_ocp_sma_store_val()
3077 ptp_ocp_sma_set_output(bp, sma_nr, 0); in ptp_ocp_sma_store_val()
3079 ptp_ocp_sma_set_inputs(bp, sma_nr, 0); in ptp_ocp_sma_store_val()
3090 val = ptp_ocp_sma_set_inputs(bp, sma_nr, val); in ptp_ocp_sma_store_val()
3092 val = ptp_ocp_sma_set_output(bp, sma_nr, val); in ptp_ocp_sma_store_val()
3098 ptp_ocp_sma_store(struct ptp_ocp *bp, const char *buf, int sma_nr) in ptp_ocp_sma_store() argument
3100 struct ptp_ocp_sma_connector *sma = &bp->sma[sma_nr - 1]; in ptp_ocp_sma_store()
3105 val = sma_parse_inputs(bp->sma_op->tbl, buf, &mode); in ptp_ocp_sma_store()
3108 return ptp_ocp_sma_store_val(bp, val, mode, sma_nr); in ptp_ocp_sma_store()
3115 struct ptp_ocp *bp = dev_get_drvdata(dev); in sma1_store() local
3118 err = ptp_ocp_sma_store(bp, buf, 1); in sma1_store()
3126 struct ptp_ocp *bp = dev_get_drvdata(dev); in sma2_store() local
3129 err = ptp_ocp_sma_store(bp, buf, 2); in sma2_store()
3137 struct ptp_ocp *bp = dev_get_drvdata(dev); in sma3_store() local
3140 err = ptp_ocp_sma_store(bp, buf, 3); in sma3_store()
3148 struct ptp_ocp *bp = dev_get_drvdata(dev); in sma4_store() local
3151 err = ptp_ocp_sma_store(bp, buf, 4); in sma4_store()
3163 struct ptp_ocp *bp = dev_get_drvdata(dev); in available_sma_inputs_show() local
3165 return ptp_ocp_select_table_show(bp->sma_op->tbl[0], buf); in available_sma_inputs_show()
3173 struct ptp_ocp *bp = dev_get_drvdata(dev); in available_sma_outputs_show() local
3175 return ptp_ocp_select_table_show(bp->sma_op->tbl[1], buf); in available_sma_outputs_show()
3193 struct ptp_ocp *bp = dev_get_drvdata(dev); in signal_store() local
3204 s.duty = bp->signal[gen].duty; in signal_store()
3205 s.phase = bp->signal[gen].phase; in signal_store()
3206 s.period = bp->signal[gen].period; in signal_store()
3207 s.polarity = bp->signal[gen].polarity; in signal_store()
3238 err = ptp_ocp_signal_set(bp, gen, &s); in signal_store()
3242 err = ptp_ocp_signal_enable(bp->signal_out[gen], gen, s.period != 0); in signal_store()
3253 struct ptp_ocp *bp = dev_get_drvdata(dev); in signal_show() local
3260 signal = &bp->signal[i]; in signal_show()
3279 struct ptp_ocp *bp = dev_get_drvdata(dev); in duty_show() local
3282 return sysfs_emit(buf, "%d\n", bp->signal[i].duty); in duty_show()
3293 struct ptp_ocp *bp = dev_get_drvdata(dev); in period_show() local
3296 return sysfs_emit(buf, "%llu\n", bp->signal[i].period); in period_show()
3307 struct ptp_ocp *bp = dev_get_drvdata(dev); in phase_show() local
3310 return sysfs_emit(buf, "%llu\n", bp->signal[i].phase); in phase_show()
3322 struct ptp_ocp *bp = dev_get_drvdata(dev); in polarity_show() local
3325 return sysfs_emit(buf, "%d\n", bp->signal[i].polarity); in polarity_show()
3336 struct ptp_ocp *bp = dev_get_drvdata(dev); in running_show() local
3339 return sysfs_emit(buf, "%d\n", bp->signal[i].running); in running_show()
3350 struct ptp_ocp *bp = dev_get_drvdata(dev); in start_show() local
3354 ts = ktime_to_timespec64(bp->signal[i].start); in start_show()
3367 struct ptp_ocp *bp = dev_get_drvdata(dev); in seconds_store() local
3381 iowrite32(val, &bp->freq_in[idx]->ctrl); in seconds_store()
3390 struct ptp_ocp *bp = dev_get_drvdata(dev); in seconds_show() local
3394 val = ioread32(&bp->freq_in[idx]->ctrl); in seconds_show()
3411 struct ptp_ocp *bp = dev_get_drvdata(dev); in frequency_show() local
3415 val = ioread32(&bp->freq_in[idx]->status); in frequency_show()
3433 struct ptp_ocp *bp = dev_get_drvdata(dev); in ptp_ocp_tty_show() local
3435 return sysfs_emit(buf, "ttyS%d", bp->port[(uintptr_t)ea->var].line); in ptp_ocp_tty_show()
3441 struct ptp_ocp *bp = dev_get_drvdata(kobj_to_dev(kobj)); in ptp_ocp_timecard_tty_is_visible() local
3451 port = &bp->port[(uintptr_t)ea->var]; in ptp_ocp_timecard_tty_is_visible()
3480 struct ptp_ocp *bp = dev_get_drvdata(dev); in serialnum_show() local
3482 if (!bp->has_eeprom_data) in serialnum_show()
3483 ptp_ocp_read_eeprom(bp); in serialnum_show()
3485 return sysfs_emit(buf, "%pM\n", bp->serial); in serialnum_show()
3492 struct ptp_ocp *bp = dev_get_drvdata(dev); in gnss_sync_show() local
3495 if (bp->gnss_lost) in gnss_sync_show()
3496 ret = sysfs_emit(buf, "LOST @ %ptT\n", &bp->gnss_lost); in gnss_sync_show()
3508 struct ptp_ocp *bp = dev_get_drvdata(dev); in utc_tai_offset_show() local
3510 return sysfs_emit(buf, "%d\n", bp->utc_tai_offset); in utc_tai_offset_show()
3518 struct ptp_ocp *bp = dev_get_drvdata(dev); in utc_tai_offset_store() local
3526 ptp_ocp_utc_distribute(bp, val); in utc_tai_offset_store()
3536 struct ptp_ocp *bp = dev_get_drvdata(dev); in ts_window_adjust_show() local
3538 return sysfs_emit(buf, "%d\n", bp->ts_window_adjust); in ts_window_adjust_show()
3546 struct ptp_ocp *bp = dev_get_drvdata(dev); in ts_window_adjust_store() local
3554 bp->ts_window_adjust = val; in ts_window_adjust_store()
3563 struct ptp_ocp *bp = dev_get_drvdata(dev); in irig_b_mode_show() local
3566 val = ioread32(&bp->irig_out->ctrl); in irig_b_mode_show()
3576 struct ptp_ocp *bp = dev_get_drvdata(dev); in irig_b_mode_store() local
3590 spin_lock_irqsave(&bp->lock, flags); in irig_b_mode_store()
3591 iowrite32(0, &bp->irig_out->ctrl); /* disable */ in irig_b_mode_store()
3592 iowrite32(reg, &bp->irig_out->ctrl); /* change mode */ in irig_b_mode_store()
3593 iowrite32(reg | IRIG_M_CTRL_ENABLE, &bp->irig_out->ctrl); in irig_b_mode_store()
3594 spin_unlock_irqrestore(&bp->lock, flags); in irig_b_mode_store()
3603 struct ptp_ocp *bp = dev_get_drvdata(dev); in clock_source_show() local
3607 select = ioread32(&bp->reg->select); in clock_source_show()
3617 struct ptp_ocp *bp = dev_get_drvdata(dev); in clock_source_store() local
3625 spin_lock_irqsave(&bp->lock, flags); in clock_source_store()
3626 iowrite32(val, &bp->reg->select); in clock_source_store()
3627 spin_unlock_irqrestore(&bp->lock, flags); in clock_source_store()
3645 struct ptp_ocp *bp = dev_get_drvdata(dev); in clock_status_drift_show() local
3649 val = ioread32(&bp->reg->status_drift); in clock_status_drift_show()
3660 struct ptp_ocp *bp = dev_get_drvdata(dev); in clock_status_offset_show() local
3664 val = ioread32(&bp->reg->status_offset); in clock_status_offset_show()
3675 struct ptp_ocp *bp = dev_get_drvdata(dev); in tod_correction_show() local
3679 val = ioread32(&bp->tod->adj_sec); in tod_correction_show()
3689 struct ptp_ocp *bp = dev_get_drvdata(dev); in tod_correction_store() local
3703 spin_lock_irqsave(&bp->lock, flags); in tod_correction_store()
3704 iowrite32(val, &bp->tod->adj_sec); in tod_correction_store()
3705 spin_unlock_irqrestore(&bp->lock, flags); in tod_correction_store()
3761 struct ptp_ocp *bp = dev_get_drvdata(kobj_to_dev(kobj)); in disciplining_config_read() local
3766 nvmem = ptp_ocp_nvmem_device_get(bp, NULL); in disciplining_config_read()
3796 struct ptp_ocp *bp = dev_get_drvdata(kobj_to_dev(kobj)); in disciplining_config_write() local
3804 nvmem = ptp_ocp_nvmem_device_get(bp, NULL); in disciplining_config_write()
3823 struct ptp_ocp *bp = dev_get_drvdata(kobj_to_dev(kobj)); in temperature_table_read() local
3828 nvmem = ptp_ocp_nvmem_device_get(bp, NULL); in temperature_table_read()
3858 struct ptp_ocp *bp = dev_get_drvdata(kobj_to_dev(kobj)); in temperature_table_write() local
3866 nvmem = ptp_ocp_nvmem_device_get(bp, NULL); in temperature_table_write()
3983 gpio_input_map(char *buf, struct ptp_ocp *bp, u16 map[][2], u16 bit, in gpio_input_map() argument
3989 if (bp->sma[i].mode != SMA_MODE_IN) in gpio_input_map()
4002 gpio_output_map(char *buf, struct ptp_ocp *bp, u16 map[][2], u16 bit) in gpio_output_map() argument
4009 if (bp->sma[i].mode != SMA_MODE_OUT) in gpio_output_map()
4017 _signal_summary_show(struct seq_file *s, struct ptp_ocp *bp, int nr) in _signal_summary_show() argument
4019 struct signal_reg __iomem *reg = bp->signal_out[nr]->mem; in _signal_summary_show()
4020 struct ptp_ocp_signal *signal = &bp->signal[nr]; in _signal_summary_show()
4078 struct ptp_ocp *bp; in ptp_ocp_summary_show() local
4088 bp = dev_get_drvdata(dev); in ptp_ocp_summary_show()
4090 seq_printf(s, "%7s: /dev/ptp%d\n", "PTP", ptp_clock_index(bp->ptp)); in ptp_ocp_summary_show()
4092 if (bp->port[i].line != -1) in ptp_ocp_summary_show()
4094 bp->port[i].line); in ptp_ocp_summary_show()
4098 if (bp->sma_map1) { in ptp_ocp_summary_show()
4101 reg = ioread32(&bp->sma_map1->gpio1); in ptp_ocp_summary_show()
4105 reg = ioread32(&bp->sma_map1->gpio2); in ptp_ocp_summary_show()
4109 reg = ioread32(&bp->sma_map2->gpio1); in ptp_ocp_summary_show()
4113 reg = ioread32(&bp->sma_map2->gpio2); in ptp_ocp_summary_show()
4134 if (bp->ts0) { in ptp_ocp_summary_show()
4135 ts_reg = bp->ts0->mem; in ptp_ocp_summary_show()
4142 if (bp->ts1) { in ptp_ocp_summary_show()
4143 ts_reg = bp->ts1->mem; in ptp_ocp_summary_show()
4145 gpio_input_map(buf, bp, sma_val, 2, NULL); in ptp_ocp_summary_show()
4150 if (bp->ts2) { in ptp_ocp_summary_show()
4151 ts_reg = bp->ts2->mem; in ptp_ocp_summary_show()
4153 gpio_input_map(buf, bp, sma_val, 3, NULL); in ptp_ocp_summary_show()
4158 if (bp->ts3) { in ptp_ocp_summary_show()
4159 ts_reg = bp->ts3->mem; in ptp_ocp_summary_show()
4161 gpio_input_map(buf, bp, sma_val, 6, NULL); in ptp_ocp_summary_show()
4166 if (bp->ts4) { in ptp_ocp_summary_show()
4167 ts_reg = bp->ts4->mem; in ptp_ocp_summary_show()
4169 gpio_input_map(buf, bp, sma_val, 7, NULL); in ptp_ocp_summary_show()
4174 if (bp->pps) { in ptp_ocp_summary_show()
4175 ts_reg = bp->pps->mem; in ptp_ocp_summary_show()
4178 map = !!(bp->pps_req_map & OCP_REQ_TIMESTAMP); in ptp_ocp_summary_show()
4182 map = !!(bp->pps_req_map & OCP_REQ_PPS); in ptp_ocp_summary_show()
4187 if (bp->fw_cap & OCP_CAP_SIGNAL) in ptp_ocp_summary_show()
4188 for (i = 0; i < bp->signals_nr; i++) in ptp_ocp_summary_show()
4189 _signal_summary_show(s, bp, i); in ptp_ocp_summary_show()
4191 if (bp->fw_cap & OCP_CAP_FREQ) in ptp_ocp_summary_show()
4192 for (i = 0; i < bp->freq_in_nr; i++) in ptp_ocp_summary_show()
4193 _frequency_summary_show(s, i, bp->freq_in[i]); in ptp_ocp_summary_show()
4195 if (bp->irig_out) { in ptp_ocp_summary_show()
4196 ctrl = ioread32(&bp->irig_out->ctrl); in ptp_ocp_summary_show()
4198 val = ioread32(&bp->irig_out->status); in ptp_ocp_summary_show()
4199 gpio_output_map(buf, bp, sma_val, 4); in ptp_ocp_summary_show()
4204 if (bp->irig_in) { in ptp_ocp_summary_show()
4205 on = ioread32(&bp->irig_in->ctrl) & IRIG_S_CTRL_ENABLE; in ptp_ocp_summary_show()
4206 val = ioread32(&bp->irig_in->status); in ptp_ocp_summary_show()
4207 gpio_input_map(buf, bp, sma_val, 4, NULL); in ptp_ocp_summary_show()
4212 if (bp->dcf_out) { in ptp_ocp_summary_show()
4213 on = ioread32(&bp->dcf_out->ctrl) & DCF_M_CTRL_ENABLE; in ptp_ocp_summary_show()
4214 val = ioread32(&bp->dcf_out->status); in ptp_ocp_summary_show()
4215 gpio_output_map(buf, bp, sma_val, 5); in ptp_ocp_summary_show()
4220 if (bp->dcf_in) { in ptp_ocp_summary_show()
4221 on = ioread32(&bp->dcf_in->ctrl) & DCF_S_CTRL_ENABLE; in ptp_ocp_summary_show()
4222 val = ioread32(&bp->dcf_in->status); in ptp_ocp_summary_show()
4223 gpio_input_map(buf, bp, sma_val, 5, NULL); in ptp_ocp_summary_show()
4228 if (bp->nmea_out) { in ptp_ocp_summary_show()
4229 on = ioread32(&bp->nmea_out->ctrl) & 1; in ptp_ocp_summary_show()
4230 val = ioread32(&bp->nmea_out->status); in ptp_ocp_summary_show()
4236 if (bp->pps_select) { in ptp_ocp_summary_show()
4237 val = ioread32(&bp->pps_select->gpio1); in ptp_ocp_summary_show()
4241 gpio_input_map(src, bp, sma_val, 0, NULL); in ptp_ocp_summary_show()
4257 gpio_input_map(buf, bp, sma_val, 1, "GNSS2"); in ptp_ocp_summary_show()
4261 val = ioread32(&bp->reg->select); in ptp_ocp_summary_show()
4280 bp->sync ? "sync" : "unsynced"); in ptp_ocp_summary_show()
4282 if (!ptp_ocp_gettimex(&bp->ptp_info, &ts, &sts)) { in ptp_ocp_summary_show()
4289 ns += (s64)bp->utc_tai_offset * NSEC_PER_SEC; in ptp_ocp_summary_show()
4296 bp->utc_tai_offset); in ptp_ocp_summary_show()
4311 struct ptp_ocp *bp; in ptp_ocp_tod_status_show() local
4315 bp = dev_get_drvdata(dev); in ptp_ocp_tod_status_show()
4317 val = ioread32(&bp->tod->ctrl); in ptp_ocp_tod_status_show()
4331 val = ioread32(&bp->tod->version); in ptp_ocp_tod_status_show()
4335 val = ioread32(&bp->tod->status); in ptp_ocp_tod_status_show()
4338 val = ioread32(&bp->tod->adj_sec); in ptp_ocp_tod_status_show()
4343 val = ioread32(&bp->tod->utc_status); in ptp_ocp_tod_status_show()
4351 val = ioread32(&bp->tod->leap); in ptp_ocp_tod_status_show()
4361 ptp_ocp_debugfs_add_device(struct ptp_ocp *bp) in ptp_ocp_debugfs_add_device() argument
4365 d = debugfs_create_dir(dev_name(&bp->dev), ptp_ocp_debugfs_root); in ptp_ocp_debugfs_add_device()
4366 bp->debug_root = d; in ptp_ocp_debugfs_add_device()
4367 debugfs_create_file("summary", 0444, bp->debug_root, in ptp_ocp_debugfs_add_device()
4368 &bp->dev, &ptp_ocp_summary_fops); in ptp_ocp_debugfs_add_device()
4369 if (bp->tod) in ptp_ocp_debugfs_add_device()
4370 debugfs_create_file("tod_status", 0444, bp->debug_root, in ptp_ocp_debugfs_add_device()
4371 &bp->dev, &ptp_ocp_tod_status_fops); in ptp_ocp_debugfs_add_device()
4375 ptp_ocp_debugfs_remove_device(struct ptp_ocp *bp) in ptp_ocp_debugfs_remove_device() argument
4377 debugfs_remove_recursive(bp->debug_root); in ptp_ocp_debugfs_remove_device()
4395 struct ptp_ocp *bp = dev_get_drvdata(dev); in ptp_ocp_dev_release() local
4398 idr_remove(&ptp_ocp_idr, bp->id); in ptp_ocp_dev_release()
4403 ptp_ocp_device_init(struct ptp_ocp *bp, struct pci_dev *pdev) in ptp_ocp_device_init() argument
4408 err = idr_alloc(&ptp_ocp_idr, bp, 0, 0, GFP_KERNEL); in ptp_ocp_device_init()
4414 bp->id = err; in ptp_ocp_device_init()
4416 bp->ptp_info = ptp_ocp_clock_info; in ptp_ocp_device_init()
4417 spin_lock_init(&bp->lock); in ptp_ocp_device_init()
4420 bp->port[i].line = -1; in ptp_ocp_device_init()
4422 bp->pdev = pdev; in ptp_ocp_device_init()
4424 device_initialize(&bp->dev); in ptp_ocp_device_init()
4425 dev_set_name(&bp->dev, "ocp%d", bp->id); in ptp_ocp_device_init()
4426 bp->dev.class = &timecard_class; in ptp_ocp_device_init()
4427 bp->dev.parent = &pdev->dev; in ptp_ocp_device_init()
4428 bp->dev.release = ptp_ocp_dev_release; in ptp_ocp_device_init()
4429 dev_set_drvdata(&bp->dev, bp); in ptp_ocp_device_init()
4431 err = device_add(&bp->dev); in ptp_ocp_device_init()
4433 dev_err(&bp->dev, "device add failed: %d\n", err); in ptp_ocp_device_init()
4437 pci_set_drvdata(pdev, bp); in ptp_ocp_device_init()
4442 put_device(&bp->dev); in ptp_ocp_device_init()
4447 ptp_ocp_symlink(struct ptp_ocp *bp, struct device *child, const char *link) in ptp_ocp_symlink() argument
4449 struct device *dev = &bp->dev; in ptp_ocp_symlink()
4456 ptp_ocp_link_child(struct ptp_ocp *bp, const char *name, const char *link) in ptp_ocp_link_child() argument
4460 dev = &bp->pdev->dev; in ptp_ocp_link_child()
4468 ptp_ocp_symlink(bp, child, link); in ptp_ocp_link_child()
4473 ptp_ocp_complete(struct ptp_ocp *bp) in ptp_ocp_complete() argument
4478 sprintf(buf, "ptp%d", ptp_clock_index(bp->ptp)); in ptp_ocp_complete()
4479 ptp_ocp_link_child(bp, buf, "ptp"); in ptp_ocp_complete()
4481 pps = pps_lookup_dev(bp->ptp); in ptp_ocp_complete()
4483 ptp_ocp_symlink(bp, &pps->dev, "pps"); in ptp_ocp_complete()
4485 ptp_ocp_debugfs_add_device(bp); in ptp_ocp_complete()
4491 ptp_ocp_phc_info(struct ptp_ocp *bp) in ptp_ocp_phc_info() argument
4496 version = ioread32(&bp->reg->version); in ptp_ocp_phc_info()
4497 select = ioread32(&bp->reg->select); in ptp_ocp_phc_info()
4498 dev_info(&bp->pdev->dev, "Version %d.%d.%d, clock %s, device ptp%d\n", in ptp_ocp_phc_info()
4501 ptp_clock_index(bp->ptp)); in ptp_ocp_phc_info()
4503 if (!ptp_ocp_gettimex(&bp->ptp_info, &ts, NULL)) in ptp_ocp_phc_info()
4504 dev_info(&bp->pdev->dev, "Time: %lld.%ld, %s\n", in ptp_ocp_phc_info()
4506 bp->sync ? "in-sync" : "UNSYNCED"); in ptp_ocp_phc_info()
4517 ptp_ocp_info(struct ptp_ocp *bp) in ptp_ocp_info() argument
4524 struct device *dev = &bp->pdev->dev; in ptp_ocp_info()
4528 ptp_ocp_phc_info(bp); in ptp_ocp_info()
4531 if (i == PORT_NMEA && bp->nmea_out && bp->port[PORT_NMEA].line != -1) { in ptp_ocp_info()
4532 bp->port[PORT_NMEA].baud = -1; in ptp_ocp_info()
4534 reg = ioread32(&bp->nmea_out->uart_baud); in ptp_ocp_info()
4536 bp->port[PORT_NMEA].baud = nmea_baud[reg]; in ptp_ocp_info()
4538 ptp_ocp_serial_info(dev, ptp_ocp_tty_port_name(i), bp->port[i].line, in ptp_ocp_info()
4539 bp->port[i].baud); in ptp_ocp_info()
4544 ptp_ocp_detach_sysfs(struct ptp_ocp *bp) in ptp_ocp_detach_sysfs() argument
4546 struct device *dev = &bp->dev; in ptp_ocp_detach_sysfs()
4553 ptp_ocp_detach(struct ptp_ocp *bp) in ptp_ocp_detach() argument
4557 ptp_ocp_debugfs_remove_device(bp); in ptp_ocp_detach()
4558 ptp_ocp_detach_sysfs(bp); in ptp_ocp_detach()
4559 ptp_ocp_attr_group_del(bp); in ptp_ocp_detach()
4560 timer_delete_sync(&bp->watchdog); in ptp_ocp_detach()
4561 if (bp->ts0) in ptp_ocp_detach()
4562 ptp_ocp_unregister_ext(bp->ts0); in ptp_ocp_detach()
4563 if (bp->ts1) in ptp_ocp_detach()
4564 ptp_ocp_unregister_ext(bp->ts1); in ptp_ocp_detach()
4565 if (bp->ts2) in ptp_ocp_detach()
4566 ptp_ocp_unregister_ext(bp->ts2); in ptp_ocp_detach()
4567 if (bp->ts3) in ptp_ocp_detach()
4568 ptp_ocp_unregister_ext(bp->ts3); in ptp_ocp_detach()
4569 if (bp->ts4) in ptp_ocp_detach()
4570 ptp_ocp_unregister_ext(bp->ts4); in ptp_ocp_detach()
4571 if (bp->pps) in ptp_ocp_detach()
4572 ptp_ocp_unregister_ext(bp->pps); in ptp_ocp_detach()
4574 if (bp->signal_out[i]) in ptp_ocp_detach()
4575 ptp_ocp_unregister_ext(bp->signal_out[i]); in ptp_ocp_detach()
4577 if (bp->port[i].line != -1) in ptp_ocp_detach()
4578 serial8250_unregister_port(bp->port[i].line); in ptp_ocp_detach()
4579 platform_device_unregister(bp->spi_flash); in ptp_ocp_detach()
4580 platform_device_unregister(bp->i2c_ctrl); in ptp_ocp_detach()
4581 if (bp->i2c_clk) in ptp_ocp_detach()
4582 clk_hw_unregister_fixed_rate(bp->i2c_clk); in ptp_ocp_detach()
4583 if (bp->n_irqs) in ptp_ocp_detach()
4584 pci_free_irq_vectors(bp->pdev); in ptp_ocp_detach()
4585 if (bp->ptp) in ptp_ocp_detach()
4586 ptp_clock_unregister(bp->ptp); in ptp_ocp_detach()
4587 kfree(bp->ptp_info.pin_config); in ptp_ocp_detach()
4588 device_unregister(&bp->dev); in ptp_ocp_detach()
4597 struct ptp_ocp *bp = priv; in ptp_ocp_dpll_lock_status_get() local
4599 *status = bp->sync ? DPLL_LOCK_STATUS_LOCKED : DPLL_LOCK_STATUS_UNLOCKED; in ptp_ocp_dpll_lock_status_get()
4609 struct ptp_ocp *bp = priv; in ptp_ocp_dpll_state_get() local
4612 if (bp->pps_select) { in ptp_ocp_dpll_state_get()
4613 idx = ioread32(&bp->pps_select->gpio1); in ptp_ocp_dpll_state_get()
4614 *state = (&bp->sma[idx] == pin_priv) ? DPLL_PIN_STATE_CONNECTED : in ptp_ocp_dpll_state_get()
4652 struct ptp_ocp *bp = dpll_priv; in ptp_ocp_dpll_direction_set() local
4654 int sma_nr = (sma - bp->sma); in ptp_ocp_dpll_direction_set()
4660 return ptp_ocp_sma_store_val(bp, 0, mode, sma_nr + 1); in ptp_ocp_dpll_direction_set()
4670 struct ptp_ocp *bp = dpll_priv; in ptp_ocp_dpll_frequency_set() local
4672 int sma_nr = (sma - bp->sma); in ptp_ocp_dpll_frequency_set()
4678 tbl = bp->sma_op->tbl[sma->mode]; in ptp_ocp_dpll_frequency_set()
4681 return ptp_ocp_sma_store_val(bp, i, sma->mode, sma_nr + 1); in ptp_ocp_dpll_frequency_set()
4692 struct ptp_ocp *bp = dpll_priv; in ptp_ocp_dpll_frequency_get() local
4694 int sma_nr = (sma - bp->sma); in ptp_ocp_dpll_frequency_get()
4698 val = bp->sma_op->get(bp, sma_nr + 1); in ptp_ocp_dpll_frequency_get()
4699 tbl = bp->sma_op->tbl[sma->mode]; in ptp_ocp_dpll_frequency_get()
4725 struct ptp_ocp *bp; in ptp_ocp_sync_work() local
4728 bp = container_of(work, struct ptp_ocp, sync_work.work); in ptp_ocp_sync_work()
4729 sync = !!(ioread32(&bp->reg->status) & OCP_STATUS_IN_SYNC); in ptp_ocp_sync_work()
4731 if (bp->sync != sync) in ptp_ocp_sync_work()
4732 dpll_device_change_ntf(bp->dpll); in ptp_ocp_sync_work()
4734 bp->sync = sync; in ptp_ocp_sync_work()
4736 queue_delayed_work(system_power_efficient_wq, &bp->sync_work, HZ); in ptp_ocp_sync_work()
4743 struct ptp_ocp *bp; in ptp_ocp_probe() local
4747 devlink = devlink_alloc(&ptp_ocp_devlink_ops, sizeof(*bp), &pdev->dev); in ptp_ocp_probe()
4759 bp = devlink_priv(devlink); in ptp_ocp_probe()
4760 err = ptp_ocp_device_init(bp, pdev); in ptp_ocp_probe()
4764 INIT_DELAYED_WORK(&bp->sync_work, ptp_ocp_sync_work); in ptp_ocp_probe()
4776 bp->n_irqs = err; in ptp_ocp_probe()
4779 err = ptp_ocp_register_resources(bp, id->driver_data); in ptp_ocp_probe()
4783 bp->ptp = ptp_clock_register(&bp->ptp_info, &pdev->dev); in ptp_ocp_probe()
4784 if (IS_ERR(bp->ptp)) { in ptp_ocp_probe()
4785 err = PTR_ERR(bp->ptp); in ptp_ocp_probe()
4787 bp->ptp = NULL; in ptp_ocp_probe()
4791 err = ptp_ocp_complete(bp); in ptp_ocp_probe()
4795 ptp_ocp_info(bp); in ptp_ocp_probe()
4799 bp->dpll = dpll_device_get(clkid, 0, THIS_MODULE); in ptp_ocp_probe()
4800 if (IS_ERR(bp->dpll)) { in ptp_ocp_probe()
4801 err = PTR_ERR(bp->dpll); in ptp_ocp_probe()
4806 err = dpll_device_register(bp->dpll, DPLL_TYPE_PPS, &dpll_ops, bp); in ptp_ocp_probe()
4811 bp->sma[i].dpll_pin = dpll_pin_get(clkid, i, THIS_MODULE, &bp->sma[i].dpll_prop); in ptp_ocp_probe()
4812 if (IS_ERR(bp->sma[i].dpll_pin)) { in ptp_ocp_probe()
4813 err = PTR_ERR(bp->sma[i].dpll_pin); in ptp_ocp_probe()
4817 err = dpll_pin_register(bp->dpll, bp->sma[i].dpll_pin, &dpll_pins_ops, in ptp_ocp_probe()
4818 &bp->sma[i]); in ptp_ocp_probe()
4820 dpll_pin_put(bp->sma[i].dpll_pin); in ptp_ocp_probe()
4824 queue_delayed_work(system_power_efficient_wq, &bp->sync_work, HZ); in ptp_ocp_probe()
4830 dpll_pin_unregister(bp->dpll, bp->sma[i].dpll_pin, &dpll_pins_ops, &bp->sma[i]); in ptp_ocp_probe()
4831 dpll_pin_put(bp->sma[i].dpll_pin); in ptp_ocp_probe()
4833 dpll_device_put(bp->dpll); in ptp_ocp_probe()
4835 ptp_ocp_detach(bp); in ptp_ocp_probe()
4846 struct ptp_ocp *bp = pci_get_drvdata(pdev); in ptp_ocp_remove() local
4847 struct devlink *devlink = priv_to_devlink(bp); in ptp_ocp_remove()
4850 cancel_delayed_work_sync(&bp->sync_work); in ptp_ocp_remove()
4852 if (bp->sma[i].dpll_pin) { in ptp_ocp_remove()
4853 dpll_pin_unregister(bp->dpll, bp->sma[i].dpll_pin, &dpll_pins_ops, &bp->sma[i]); in ptp_ocp_remove()
4854 dpll_pin_put(bp->sma[i].dpll_pin); in ptp_ocp_remove()
4857 dpll_device_unregister(bp->dpll, &dpll_ops, bp); in ptp_ocp_remove()
4858 dpll_device_put(bp->dpll); in ptp_ocp_remove()
4860 ptp_ocp_detach(bp); in ptp_ocp_remove()
4878 struct ptp_ocp *bp; in ptp_ocp_i2c_notifier_call() local
4900 bp = dev_get_drvdata(dev); in ptp_ocp_i2c_notifier_call()
4902 ptp_ocp_symlink(bp, child, "i2c"); in ptp_ocp_i2c_notifier_call()
4904 sysfs_remove_link(&bp->dev.kobj, "i2c"); in ptp_ocp_i2c_notifier_call()