ptp: ocp: convert serial ports to array
BugLink: https://bugs.launchpad.net/bugs/2085849 [ Upstream commit d7875b4b078f7e2d862e88aed99c3ea0381aa189 ] Simplify serial port management code by using array of ports and helpers to get the name of the port. This change is needed to make the next patch simplier. Signed-off-by: Vadim Fedorenko <vadfed@meta.com> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Paolo Abeni <pabeni@redhat.com> Stable-dep-of: 82ace0c8fe9b ("ptp: ocp: adjust sysfs entries to expose tty information") Signed-off-by: Sasha Levin <sashal@kernel.org> Signed-off-by: Manuel Diewald <manuel.diewald@canonical.com> Signed-off-by: Roxana Nicolescu <roxana.nicolescu@canonical.com>
This commit is contained in:
committed by
Mehmet Basaran
parent
e7592a48bc
commit
9768060560
+55
-61
@@ -306,6 +306,15 @@ struct ptp_ocp_serial_port {
|
||||
#define OCP_SERIAL_LEN 6
|
||||
#define OCP_SMA_NUM 4
|
||||
|
||||
enum {
|
||||
PORT_GNSS,
|
||||
PORT_GNSS2,
|
||||
PORT_MAC, /* miniature atomic clock */
|
||||
PORT_NMEA,
|
||||
|
||||
__PORT_COUNT,
|
||||
};
|
||||
|
||||
struct ptp_ocp {
|
||||
struct pci_dev *pdev;
|
||||
struct device dev;
|
||||
@@ -347,10 +356,7 @@ struct ptp_ocp {
|
||||
struct delayed_work sync_work;
|
||||
int id;
|
||||
int n_irqs;
|
||||
struct ptp_ocp_serial_port gnss_port;
|
||||
struct ptp_ocp_serial_port gnss2_port;
|
||||
struct ptp_ocp_serial_port mac_port; /* miniature atomic clock */
|
||||
struct ptp_ocp_serial_port nmea_port;
|
||||
struct ptp_ocp_serial_port port[__PORT_COUNT];
|
||||
bool fw_loader;
|
||||
u8 fw_tag;
|
||||
u16 fw_version;
|
||||
@@ -641,28 +647,28 @@ static struct ocp_resource ocp_fb_resource[] = {
|
||||
},
|
||||
},
|
||||
{
|
||||
OCP_SERIAL_RESOURCE(gnss_port),
|
||||
OCP_SERIAL_RESOURCE(port[PORT_GNSS]),
|
||||
.offset = 0x00160000 + 0x1000, .irq_vec = 3,
|
||||
.extra = &(struct ptp_ocp_serial_port) {
|
||||
.baud = 115200,
|
||||
},
|
||||
},
|
||||
{
|
||||
OCP_SERIAL_RESOURCE(gnss2_port),
|
||||
OCP_SERIAL_RESOURCE(port[PORT_GNSS2]),
|
||||
.offset = 0x00170000 + 0x1000, .irq_vec = 4,
|
||||
.extra = &(struct ptp_ocp_serial_port) {
|
||||
.baud = 115200,
|
||||
},
|
||||
},
|
||||
{
|
||||
OCP_SERIAL_RESOURCE(mac_port),
|
||||
OCP_SERIAL_RESOURCE(port[PORT_MAC]),
|
||||
.offset = 0x00180000 + 0x1000, .irq_vec = 5,
|
||||
.extra = &(struct ptp_ocp_serial_port) {
|
||||
.baud = 57600,
|
||||
},
|
||||
},
|
||||
{
|
||||
OCP_SERIAL_RESOURCE(nmea_port),
|
||||
OCP_SERIAL_RESOURCE(port[PORT_NMEA]),
|
||||
.offset = 0x00190000 + 0x1000, .irq_vec = 10,
|
||||
},
|
||||
{
|
||||
@@ -720,7 +726,7 @@ static struct ocp_resource ocp_art_resource[] = {
|
||||
.offset = 0x01000000, .size = 0x10000,
|
||||
},
|
||||
{
|
||||
OCP_SERIAL_RESOURCE(gnss_port),
|
||||
OCP_SERIAL_RESOURCE(port[PORT_GNSS]),
|
||||
.offset = 0x00160000 + 0x1000, .irq_vec = 3,
|
||||
.extra = &(struct ptp_ocp_serial_port) {
|
||||
.baud = 115200,
|
||||
@@ -819,7 +825,7 @@ static struct ocp_resource ocp_art_resource[] = {
|
||||
},
|
||||
},
|
||||
{
|
||||
OCP_SERIAL_RESOURCE(mac_port),
|
||||
OCP_SERIAL_RESOURCE(port[PORT_MAC]),
|
||||
.offset = 0x00190000, .irq_vec = 7,
|
||||
.extra = &(struct ptp_ocp_serial_port) {
|
||||
.baud = 9600,
|
||||
@@ -1441,6 +1447,15 @@ ptp_ocp_tod_gnss_name(int idx)
|
||||
return gnss_name[idx];
|
||||
}
|
||||
|
||||
static const char *
|
||||
ptp_ocp_tty_port_name(int idx)
|
||||
{
|
||||
static const char * const tty_name[] = {
|
||||
"GNSS", "GNSS2", "MAC", "NMEA"
|
||||
};
|
||||
return tty_name[idx];
|
||||
}
|
||||
|
||||
struct ptp_ocp_nvmem_match_info {
|
||||
struct ptp_ocp *bp;
|
||||
const void * const tag;
|
||||
@@ -3676,16 +3691,11 @@ ptp_ocp_summary_show(struct seq_file *s, void *data)
|
||||
bp = dev_get_drvdata(dev);
|
||||
|
||||
seq_printf(s, "%7s: /dev/ptp%d\n", "PTP", ptp_clock_index(bp->ptp));
|
||||
if (bp->gnss_port.line != -1)
|
||||
seq_printf(s, "%7s: /dev/ttyS%d\n", "GNSS1",
|
||||
bp->gnss_port.line);
|
||||
if (bp->gnss2_port.line != -1)
|
||||
seq_printf(s, "%7s: /dev/ttyS%d\n", "GNSS2",
|
||||
bp->gnss2_port.line);
|
||||
if (bp->mac_port.line != -1)
|
||||
seq_printf(s, "%7s: /dev/ttyS%d\n", "MAC", bp->mac_port.line);
|
||||
if (bp->nmea_port.line != -1)
|
||||
seq_printf(s, "%7s: /dev/ttyS%d\n", "NMEA", bp->nmea_port.line);
|
||||
for (i = 0; i < __PORT_COUNT; i++) {
|
||||
if (bp->port[i].line != -1)
|
||||
seq_printf(s, "%7s: /dev/ttyS%d\n", ptp_ocp_tty_port_name(i),
|
||||
bp->port[i].line);
|
||||
}
|
||||
|
||||
memset(sma_val, 0xff, sizeof(sma_val));
|
||||
if (bp->sma_map1) {
|
||||
@@ -3995,7 +4005,7 @@ ptp_ocp_dev_release(struct device *dev)
|
||||
static int
|
||||
ptp_ocp_device_init(struct ptp_ocp *bp, struct pci_dev *pdev)
|
||||
{
|
||||
int err;
|
||||
int i, err;
|
||||
|
||||
mutex_lock(&ptp_ocp_lock);
|
||||
err = idr_alloc(&ptp_ocp_idr, bp, 0, 0, GFP_KERNEL);
|
||||
@@ -4008,10 +4018,10 @@ ptp_ocp_device_init(struct ptp_ocp *bp, struct pci_dev *pdev)
|
||||
|
||||
bp->ptp_info = ptp_ocp_clock_info;
|
||||
spin_lock_init(&bp->lock);
|
||||
bp->gnss_port.line = -1;
|
||||
bp->gnss2_port.line = -1;
|
||||
bp->mac_port.line = -1;
|
||||
bp->nmea_port.line = -1;
|
||||
|
||||
for (i = 0; i < __PORT_COUNT; i++)
|
||||
bp->port[i].line = -1;
|
||||
|
||||
bp->pdev = pdev;
|
||||
|
||||
device_initialize(&bp->dev);
|
||||
@@ -4067,23 +4077,15 @@ ptp_ocp_complete(struct ptp_ocp *bp)
|
||||
{
|
||||
struct pps_device *pps;
|
||||
char buf[32];
|
||||
int i;
|
||||
|
||||
if (bp->gnss_port.line != -1) {
|
||||
sprintf(buf, "ttyS%d", bp->gnss_port.line);
|
||||
ptp_ocp_link_child(bp, buf, "ttyGNSS");
|
||||
}
|
||||
if (bp->gnss2_port.line != -1) {
|
||||
sprintf(buf, "ttyS%d", bp->gnss2_port.line);
|
||||
ptp_ocp_link_child(bp, buf, "ttyGNSS2");
|
||||
}
|
||||
if (bp->mac_port.line != -1) {
|
||||
sprintf(buf, "ttyS%d", bp->mac_port.line);
|
||||
ptp_ocp_link_child(bp, buf, "ttyMAC");
|
||||
}
|
||||
if (bp->nmea_port.line != -1) {
|
||||
sprintf(buf, "ttyS%d", bp->nmea_port.line);
|
||||
ptp_ocp_link_child(bp, buf, "ttyNMEA");
|
||||
for (i = 0; i < __PORT_COUNT; i++) {
|
||||
if (bp->port[i].line != -1) {
|
||||
sprintf(buf, "ttyS%d", bp->port[i].line);
|
||||
ptp_ocp_link_child(bp, buf, ptp_ocp_tty_port_name(i));
|
||||
}
|
||||
}
|
||||
|
||||
sprintf(buf, "ptp%d", ptp_clock_index(bp->ptp));
|
||||
ptp_ocp_link_child(bp, buf, "ptp");
|
||||
|
||||
@@ -4132,23 +4134,20 @@ ptp_ocp_info(struct ptp_ocp *bp)
|
||||
};
|
||||
struct device *dev = &bp->pdev->dev;
|
||||
u32 reg;
|
||||
int i;
|
||||
|
||||
ptp_ocp_phc_info(bp);
|
||||
|
||||
ptp_ocp_serial_info(dev, "GNSS", bp->gnss_port.line,
|
||||
bp->gnss_port.baud);
|
||||
ptp_ocp_serial_info(dev, "GNSS2", bp->gnss2_port.line,
|
||||
bp->gnss2_port.baud);
|
||||
ptp_ocp_serial_info(dev, "MAC", bp->mac_port.line, bp->mac_port.baud);
|
||||
if (bp->nmea_out && bp->nmea_port.line != -1) {
|
||||
bp->nmea_port.baud = -1;
|
||||
for (i = 0; i < __PORT_COUNT; i++) {
|
||||
if (i == PORT_NMEA && bp->nmea_out && bp->port[PORT_NMEA].line != -1) {
|
||||
bp->port[PORT_NMEA].baud = -1;
|
||||
|
||||
reg = ioread32(&bp->nmea_out->uart_baud);
|
||||
if (reg < ARRAY_SIZE(nmea_baud))
|
||||
bp->nmea_port.baud = nmea_baud[reg];
|
||||
|
||||
ptp_ocp_serial_info(dev, "NMEA", bp->nmea_port.line,
|
||||
bp->nmea_port.baud);
|
||||
reg = ioread32(&bp->nmea_out->uart_baud);
|
||||
if (reg < ARRAY_SIZE(nmea_baud))
|
||||
bp->port[PORT_NMEA].baud = nmea_baud[reg];
|
||||
}
|
||||
ptp_ocp_serial_info(dev, ptp_ocp_tty_port_name(i), bp->port[i].line,
|
||||
bp->port[i].baud);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4189,14 +4188,9 @@ ptp_ocp_detach(struct ptp_ocp *bp)
|
||||
for (i = 0; i < 4; i++)
|
||||
if (bp->signal_out[i])
|
||||
ptp_ocp_unregister_ext(bp->signal_out[i]);
|
||||
if (bp->gnss_port.line != -1)
|
||||
serial8250_unregister_port(bp->gnss_port.line);
|
||||
if (bp->gnss2_port.line != -1)
|
||||
serial8250_unregister_port(bp->gnss2_port.line);
|
||||
if (bp->mac_port.line != -1)
|
||||
serial8250_unregister_port(bp->mac_port.line);
|
||||
if (bp->nmea_port.line != -1)
|
||||
serial8250_unregister_port(bp->nmea_port.line);
|
||||
for (i = 0; i < __PORT_COUNT; i++)
|
||||
if (bp->port[i].line != -1)
|
||||
serial8250_unregister_port(bp->port[i].line);
|
||||
platform_device_unregister(bp->spi_flash);
|
||||
platform_device_unregister(bp->i2c_ctrl);
|
||||
if (bp->i2c_clk)
|
||||
|
||||
Reference in New Issue
Block a user