mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 04:44:45 +01:00
i3c: mipi-i3c-hci: Refactor PIO register initialization
Move the PIO register setup logic out of hci_pio_init() into a new helper, __hci_pio_init(). This refactoring prepares for Runtime PM support by allowing PIO registers to be reinitialized independently after resume. Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Reviewed-by: Frank Li <Frank.Li@nxp.com> Link: https://patch.msgid.link/20260113072702.16268-13-adrian.hunter@intel.com Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
This commit is contained in:
parent
8169587204
commit
ca4d4682d3
1 changed files with 28 additions and 17 deletions
|
|
@ -135,27 +135,14 @@ struct hci_pio_data {
|
|||
u32 enabled_irqs;
|
||||
};
|
||||
|
||||
static int hci_pio_init(struct i3c_hci *hci)
|
||||
static void __hci_pio_init(struct i3c_hci *hci, u32 *size_val_ptr)
|
||||
{
|
||||
struct hci_pio_data *pio;
|
||||
u32 val, size_val, rx_thresh, tx_thresh, ibi_val;
|
||||
|
||||
pio = devm_kzalloc(hci->master.dev.parent, sizeof(*pio), GFP_KERNEL);
|
||||
if (!pio)
|
||||
return -ENOMEM;
|
||||
|
||||
hci->io_data = pio;
|
||||
spin_lock_init(&pio->lock);
|
||||
struct hci_pio_data *pio = hci->io_data;
|
||||
|
||||
size_val = pio_reg_read(QUEUE_SIZE);
|
||||
dev_dbg(&hci->master.dev, "CMD/RESP FIFO = %ld entries\n",
|
||||
FIELD_GET(CR_QUEUE_SIZE, size_val));
|
||||
dev_dbg(&hci->master.dev, "IBI FIFO = %ld bytes\n",
|
||||
4 * FIELD_GET(IBI_STATUS_SIZE, size_val));
|
||||
dev_dbg(&hci->master.dev, "RX data FIFO = %d bytes\n",
|
||||
4 * (2 << FIELD_GET(RX_DATA_BUFFER_SIZE, size_val)));
|
||||
dev_dbg(&hci->master.dev, "TX data FIFO = %d bytes\n",
|
||||
4 * (2 << FIELD_GET(TX_DATA_BUFFER_SIZE, size_val)));
|
||||
if (size_val_ptr)
|
||||
*size_val_ptr = size_val;
|
||||
|
||||
/*
|
||||
* Let's initialize data thresholds to half of the actual FIFO size.
|
||||
|
|
@ -201,6 +188,30 @@ static int hci_pio_init(struct i3c_hci *hci)
|
|||
|
||||
/* Always accept error interrupts (will be activated on first xfer) */
|
||||
pio->enabled_irqs = STAT_ALL_ERRORS;
|
||||
}
|
||||
|
||||
static int hci_pio_init(struct i3c_hci *hci)
|
||||
{
|
||||
struct hci_pio_data *pio;
|
||||
u32 size_val;
|
||||
|
||||
pio = devm_kzalloc(hci->master.dev.parent, sizeof(*pio), GFP_KERNEL);
|
||||
if (!pio)
|
||||
return -ENOMEM;
|
||||
|
||||
hci->io_data = pio;
|
||||
spin_lock_init(&pio->lock);
|
||||
|
||||
__hci_pio_init(hci, &size_val);
|
||||
|
||||
dev_dbg(&hci->master.dev, "CMD/RESP FIFO = %ld entries\n",
|
||||
FIELD_GET(CR_QUEUE_SIZE, size_val));
|
||||
dev_dbg(&hci->master.dev, "IBI FIFO = %ld bytes\n",
|
||||
4 * FIELD_GET(IBI_STATUS_SIZE, size_val));
|
||||
dev_dbg(&hci->master.dev, "RX data FIFO = %d bytes\n",
|
||||
4 * (2 << FIELD_GET(RX_DATA_BUFFER_SIZE, size_val)));
|
||||
dev_dbg(&hci->master.dev, "TX data FIFO = %d bytes\n",
|
||||
4 * (2 << FIELD_GET(TX_DATA_BUFFER_SIZE, size_val)));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue