drivers/net/ethernet/chelsio/cxgb4/sge.c:2571 cxgb4_ethofld_send_flowc() warn: missing error code 'ret'
by Dan Carpenter
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 79160a603bdb51916226caf4a6616cc4e1c58a58
commit: 52bfcdd87e83d9e69d22da5f26b1512ffc81deed net:CXGB4: fix leak if sk_buff is not used
config: x86_64-randconfig-m001-20210706 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
Reported-by: Dan Carpenter <dan.carpenter(a)oracle.com>
New smatch warnings:
drivers/net/ethernet/chelsio/cxgb4/sge.c:2571 cxgb4_ethofld_send_flowc() warn: missing error code 'ret'
vim +/ret +2571 drivers/net/ethernet/chelsio/cxgb4/sge.c
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2535 int cxgb4_ethofld_send_flowc(struct net_device *dev, u32 eotid, u32 tc)
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2536 {
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2537 struct port_info *pi = netdev2pinfo(dev);
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2538 struct adapter *adap = netdev2adap(dev);
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2539 enum sge_eosw_state next_state;
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2540 struct sge_eosw_txq *eosw_txq;
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2541 u32 len, len16, nparams = 6;
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2542 struct fw_flowc_wr *flowc;
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2543 struct eotid_entry *entry;
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2544 struct sge_ofld_rxq *rxq;
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2545 struct sk_buff *skb;
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2546 int ret = 0;
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2547
a422d5ff6defb1 Gustavo A. R. Silva 2020-06-19 2548 len = struct_size(flowc, mnemval, nparams);
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2549 len16 = DIV_ROUND_UP(len, 16);
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2550
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2551 entry = cxgb4_lookup_eotid(&adap->tids, eotid);
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2552 if (!entry)
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2553 return -ENOMEM;
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2554
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2555 eosw_txq = (struct sge_eosw_txq *)entry->data;
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2556 if (!eosw_txq)
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2557 return -ENOMEM;
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2558
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2559 skb = alloc_skb(len, GFP_KERNEL);
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2560 if (!skb)
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2561 return -ENOMEM;
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2562
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2563 spin_lock_bh(&eosw_txq->lock);
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2564 if (tc != FW_SCHED_CLS_NONE) {
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2565 if (eosw_txq->state != CXGB4_EO_STATE_CLOSED)
52bfcdd87e83d9 Íñigo Huguet 2021-05-05 2566 goto out_free_skb;
^^^^^^^^^^^^^^^^^
Are these error paths?
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2567
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2568 next_state = CXGB4_EO_STATE_FLOWC_OPEN_SEND;
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2569 } else {
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2570 if (eosw_txq->state != CXGB4_EO_STATE_ACTIVE)
52bfcdd87e83d9 Íñigo Huguet 2021-05-05 @2571 goto out_free_skb;
Here too
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2572
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2573 next_state = CXGB4_EO_STATE_FLOWC_CLOSE_SEND;
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2574 }
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2575
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2576 flowc = __skb_put(skb, len);
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2577 memset(flowc, 0, len);
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2578
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2579 rxq = &adap->sge.eohw_rxq[eosw_txq->hwqid];
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2580 flowc->flowid_len16 = cpu_to_be32(FW_WR_LEN16_V(len16) |
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2581 FW_WR_FLOWID_V(eosw_txq->hwtid));
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2582 flowc->op_to_nparams = cpu_to_be32(FW_WR_OP_V(FW_FLOWC_WR) |
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2583 FW_FLOWC_WR_NPARAMS_V(nparams) |
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2584 FW_WR_COMPL_V(1));
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2585 flowc->mnemval[0].mnemonic = FW_FLOWC_MNEM_PFNVFN;
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2586 flowc->mnemval[0].val = cpu_to_be32(FW_PFVF_CMD_PFN_V(adap->pf));
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2587 flowc->mnemval[1].mnemonic = FW_FLOWC_MNEM_CH;
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2588 flowc->mnemval[1].val = cpu_to_be32(pi->tx_chan);
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2589 flowc->mnemval[2].mnemonic = FW_FLOWC_MNEM_PORT;
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2590 flowc->mnemval[2].val = cpu_to_be32(pi->tx_chan);
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2591 flowc->mnemval[3].mnemonic = FW_FLOWC_MNEM_IQID;
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2592 flowc->mnemval[3].val = cpu_to_be32(rxq->rspq.abs_id);
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2593 flowc->mnemval[4].mnemonic = FW_FLOWC_MNEM_SCHEDCLASS;
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2594 flowc->mnemval[4].val = cpu_to_be32(tc);
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2595 flowc->mnemval[5].mnemonic = FW_FLOWC_MNEM_EOSTATE;
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2596 flowc->mnemval[5].val = cpu_to_be32(tc == FW_SCHED_CLS_NONE ?
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2597 FW_FLOWC_MNEM_EOSTATE_CLOSING :
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2598 FW_FLOWC_MNEM_EOSTATE_ESTABLISHED);
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2599
69422a7e5d578a Rahul Lakkireddy 2020-04-30 2600 /* Free up any pending skbs to ensure there's room for
69422a7e5d578a Rahul Lakkireddy 2020-04-30 2601 * termination FLOWC.
69422a7e5d578a Rahul Lakkireddy 2020-04-30 2602 */
69422a7e5d578a Rahul Lakkireddy 2020-04-30 2603 if (tc == FW_SCHED_CLS_NONE)
69422a7e5d578a Rahul Lakkireddy 2020-04-30 2604 eosw_txq_flush_pending_skbs(eosw_txq);
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2605
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2606 ret = eosw_txq_enqueue(eosw_txq, skb);
52bfcdd87e83d9 Íñigo Huguet 2021-05-05 2607 if (ret)
52bfcdd87e83d9 Íñigo Huguet 2021-05-05 2608 goto out_free_skb;
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2609
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2610 eosw_txq->state = next_state;
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2611 eosw_txq->flowc_idx = eosw_txq->pidx;
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2612 eosw_txq_advance(eosw_txq, 1);
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2613 ethofld_xmit(dev, eosw_txq);
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2614
52bfcdd87e83d9 Íñigo Huguet 2021-05-05 2615 spin_unlock_bh(&eosw_txq->lock);
52bfcdd87e83d9 Íñigo Huguet 2021-05-05 2616 return 0;
52bfcdd87e83d9 Íñigo Huguet 2021-05-05 2617
52bfcdd87e83d9 Íñigo Huguet 2021-05-05 2618 out_free_skb:
52bfcdd87e83d9 Íñigo Huguet 2021-05-05 2619 dev_consume_skb_any(skb);
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2620 spin_unlock_bh(&eosw_txq->lock);
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2621 return ret;
0e395b3cb1fb82 Rahul Lakkireddy 2019-11-07 2622 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
2 months, 1 week
[PATCH v7 00/10] Add support for DMA2D of STMicroelectronics STM32 Soc series
by Dillon Min
This patchset introduces a basic support for DMA2D Interface
of STMicroelectronics STM32 SoC series.
This first basic support implements R2M, M2M, M2M_PFC
M2M_BLEND support will be added later on.
This has been tested on STM32469-DISCO board.
history
v7:
- fix compile test reported by lkp(a)intel.com, thanks.
- collect acked-by, reviewed-by from Gabriel, Patrice.
v6 link:
https://lore.kernel.org/lkml/1634633003-18132-1-git-send-email-dillon.min...
v6:
- use 2592x2592 instead of 0x3fff, 0xffff. [PATCH v6 10/10]
- add space in '(V4L2_CID_BASE+43)' to avoid checkpatch warrnings. [PATCH v6 08/10]
v5 link:
https://lore.kernel.org/lkml/1634533488-25334-1-git-send-email-dillon.min...
v5:
- rebase to media_tree https://git.linuxtv.org/media_tree.git/
- remove unused log from dma2d driver to avoid spam kernel log.
- fix 0xFFFFFF to 0xffffff, 2^24 to 2^24 -1, etc.
- introduce patch "media: v4l2-ctrls: Add V4L2_CID_COLORFX_CBCR max setting"
to add V4L2_CID_COLORFX_CBCR entry.
- thanks to Hans's patch, open nullptr check in v4l2-compliance, update new
test result. thanks.
https://lore.kernel.org/linux-media/3acd9ee4-5a58-6ed4-17fe-61596a5252b8@...
v4 link:
https://lore.kernel.org/lkml/bc8e1cd1-0013-9062-88b6-fddca535919f@xs4all.nl/
v4:
- replace V4L2_COLORFX_SET_ARGB, V4L2_CID_COLORFX_ARGB to
V4L2_COLORFX_SET_RGB, V4L2_CID_COLORFX_RGB since Alpha paramter not used
in current. thanks Hans.
v3 link:
https://lore.kernel.org/lkml/1633689012-14492-1-git-send-email-dillon.min...
v3:
- use V4L2_COLORFX_SET_ARGB, V4L2_CID_COLORFX_ARGB to pass argb paramter to
the dma2d driver, instead of add stm32 private ioctl.
- some v2's patch are removed in this version.
- "[PATCH v2 7/9] media: docs: add doc for the stm32 dma2d driver"
- "[PATCH v2 8/9] media: v4l: uapi: Add user control base for stm32 dma2d
controls"
- dma2d's driver changes based on Hans's review result. detail can be found at
"media: stm32-dma2d: STM32 DMA2D driver"
- add stm32 clk drivers bugfix, ltdc clock disabled after kenerl boot up.
v3 based on kernel and v4l-utils git:
kernel:
commit 9e1ff307c779ce1f0f810c7ecce3d95bbae40896
Author: Linus Torvalds <torvalds(a)linux-foundation.org>
Date: Sun Oct 3 14:08:47 2021 -0700
Linux 5.15-rc4
v4l-utils:
commit 700f5ded9c6de2c6dfe5d1b453d85566f95b4f0c
Author: Hans Verkuil <hverkuil-cisco(a)xs4all.nl>
Date: Sat Oct 2 11:01:05 2021 +0200
test-media: show version info earlier and show cmd args
Log the version info earlier and also log the command line arguments.
Signed-off-by: Hans Verkuil <hverkuil-cisco(a)xs4all.nl>
v2 link:
https://lore.kernel.org/lkml/1626341068-20253-11-git-send-email-dillon.mi...
v2:
- update v4l2-compliance to SHA: a4f2e3a6f306 2021-07-13 08:04:15
the test results at below [1].
- introduce Documentation/userspace-api/media/drivers/stm32-uapi.rst
to explain the detail of dma2d's ioctl.
- reserved 16 ioctls from v4l2-controls.h for stm32, introduce stm32-media.h.
- collect Reviewed-by tag from Rob Herring.
- update dma2d driver from Hans's review. the details can be found
at related patches.
v1 link:
https://lore.kernel.org/lkml/1621508727-24486-1-git-send-email-dillon.min...
v1:
The commit based on kernel(master): c3d0e3fd41b7f0f5d5d5b6022ab7e813f04ea727
Note for v4l2-compliance tool on nu-mmu platform:
I add two change based on v4l-utils since commit:
f0c7e3d71eaf4182bae7eb3ee0e43b4eeb047ea9
- change fork() to vfork() in v4l2-test-controls.cpp
since no-mmu platform don't include fork().
with v4l2-compliance test log (with above modification):
since the stm32f469-disco ram limitation, there are 25 failed on
dma_alloc_coherent()
Really appreciate if someone can help to test this patch on the STM32429I-EVAL
evaluation board (https://www.st.com/en/evaluation-tools/stm32429i-eval.html)
8M x 32-bit SDRAM, 1M x 16-bit SRAM and 8M x 16-bit NOR Flash
~ # free
total used free shared buff/cache available
Mem: 15648 4076 8260 0 3312 7632
~ # v4l2-compliance -f -d /dev/video0 > /dev/ttyprintk
[ 234.919026] [U] v4l2-compliance 1.21.0-4855, 32 bits, 32-bit time_t
[ 235.880625] [U] v4l2-compliance SHA: 700f5ded9c6d 2021-10-02 09:01:05
[ 236.877059] [U] Compliance test for stm-dma2d device /dev/video0:
[ 237.835965] [U] Driver Info:
[ 238.311502] [U] Driver name : stm-dma2d
[ 238.787381] [U] Card type : stm-dma2d
[ 239.255574] [U] Bus info : platform:stm-dma2d
[ 239.722920] [U] Driver version : 5.15.0
[ 240.183388] [U] Capabilities : 0x84208000
[ 240.640809] [U] Video Memory-to-Memory
[ 241.095669] [U] Streaming
[ 241.540812] [U] Extended Pix Format
[ 241.978288] [U] Device Capabilities
[ 242.409891] [U] Device Caps : 0x04208000
[ 242.841150] [U] Video Memory-to-Memory
[ 243.265246] [U] Streaming
[ 243.680040] [U] Extended Pix Format
[ 244.092896] [U] Required ioctls:
[ 244.499208] [U] test VIDIOC_QUERYCAP: OK
[ 244.943985] [U] test invalid ioctls: OK
[ 245.346521] [U] Allow for multiple opens:
[ 245.749312] [U] test second /dev/video0 open: OK
[ 246.526863] [U] test VIDIOC_QUERYCAP: OK
[ 246.929589] [U] test VIDIOC_G/S_PRIORITY: OK
[ 247.548185] [U] test for unlimited opens: OK
[ 247.936192] [U] Debug ioctls:
[ 248.311265] [U] test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
[ 249.058547] [U] test VIDIOC_LOG_STATUS: OK (Not Supported)
[ 249.802868] [U] Input ioctls:
[ 250.173701] [U] test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
[ 250.914653] [U] test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
[ 251.657517] [U] test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
[ 252.408231] [U] test VIDIOC_ENUMAUDIO: OK (Not Supported)
[ 253.166559] [U] test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
[ 253.933560] [U] test VIDIOC_G/S_AUDIO: OK (Not Supported)
[ 254.695551] [U] Inputs: 0 Audio Inputs: 0 Tuners: 0
[ 255.082805] [U] Output ioctls:
[ 255.462189] [U] test VIDIOC_G/S_MODULATOR: OK (Not Supported)
[ 256.218699] [U] test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
[ 256.997586] [U] test VIDIOC_ENUMAUDOUT: OK (Not Supported)
[ 257.796012] [U] test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
[ 258.609978] [U] test VIDIOC_G/S_AUDOUT: OK (Not Supported)
[ 259.453435] [U] Outputs: 0 Audio Outputs: 0 Modulators: 0
[ 260.303571] [U] Input/Output configuration ioctls:
[ 260.741454] [U] test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
[ 261.618607] [U] test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
[ 262.517280] [U] test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
[ 263.427620] [U] test VIDIOC_G/S_EDID: OK (Not Supported)
[ 264.344630] [U] Control ioctls:
[ 264.833262] [U] test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
[ 265.763394] [U] test VIDIOC_QUERYCTRL: OK
[ 266.247635] [U] test VIDIOC_G/S_CTRL: OK
[ 266.730244] [U] test VIDIOC_G/S/TRY_EXT_CTRLS: OK
[ 267.651495] [U] test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
[ 268.573048] [U] test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
[ 269.503304] [U] Standard Controls: 3 Private Controls: 0
[ 269.976154] [U] Format ioctls:
[ 270.458701] [U] test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
[ 271.395051] [U] test VIDIOC_G/S_PARM: OK (Not Supported)
[ 272.316304] [U] test VIDIOC_G_FBUF: OK (Not Supported)
[ 273.242824] [U] test VIDIOC_G_FMT: OK
[ 273.719213] [U] test VIDIOC_TRY_FMT: OK
[ 274.187524] [U] test VIDIOC_S_FMT: OK
[ 274.643930] [U] test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
[ 275.547089] [U] test Cropping: OK (Not Supported)
[ 276.446375] [U] test Composing: OK (Not Supported)
[ 277.347458] [U] test Scaling: OK
[ 277.800218] [U] Codec ioctls:
[ 278.245926] [U] test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
[ 279.140451] [U] test VIDIOC_G_ENC_INDEX: OK (Not Supported)
[ 280.023765] [U] test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
[ 280.910844] [U] Buffer ioctls:
[ 281.466649] [U] test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
[ 282.381634] [U] test VIDIOC_EXPBUF: OK
[ 282.830946] [U] test Requests: OK (Not Supported)
[ 283.698629] [U] test TIME32/64: OK
[ 284.157170] [U] Test input 0:
[ 284.594093] [U] Stream using all formats:
[ 288.379647] [U]
[ 289.111860] [U] Video Capture: Captured 8 buffers
[ 289.487473] [U] BA24 (32-bit ARGB 8-8-8-8) 1x1 -> BA24 (32-bit ARGB 8-8-8-8) 1x1: OK
[ 293.012687] [U]
[ 293.629532] [U] Video Capture: Captured 8 buffers
[ 293.947618] [U] BA24 (32-bit ARGB 8-8-8-8) 1x1 -> RGB3 (24-bit RGB 8-8-8) 1x1: OK
[ 296.900762] [U]
[ 297.387693] [U] Video Capture: Captured 8 buffers
[ 297.643353] [U] BA24 (32-bit ARGB 8-8-8-8) 1x1 -> RGBP (16-bit RGB 5-6-5) 1x1: OK
[ 299.994539] [U]
[ 300.426567] [U] Video Capture: Captured 8 buffers
[ 300.669991] [U] BA24 (32-bit ARGB 8-8-8-8) 1x1 -> AR15 (16-bit ARGB 1-5-5-5) 1x1: OK
[ 303.087504] [U]
[ 303.519269] [U] Video Capture: Captured 8 buffers
[ 303.757695] [U] BA24 (32-bit ARGB 8-8-8-8) 1x1 -> AR12 (16-bit ARGB 4-4-4-4) 1x1: OK
[ 304.244993] stm-dma2d 4002b000.dma2d: dma alloc of size 26873856 failed
[ 304.745438] [U] fail: v4l2-test-buffers.cpp(1349): q.reqbufs(node, 2)
[ 305.257392] [U] BA24 (32-bit ARGB 8-8-8-8) 2592x2592 -> BA24 (32-bit ARGB 8-8-8-8) 2592x2592: FAIL
[ 305.781175] stm-dma2d 4002b000.dma2d: dma alloc of size 26873856 failed
[ 306.321901] [U] fail: v4l2-test-buffers.cpp(1349): q.reqbufs(node, 2)
[ 306.902217] [U] BA24 (32-bit ARGB 8-8-8-8) 2592x2592 -> RGB3 (24-bit RGB 8-8-8) 2592x2592: FAIL
[ 307.528929] stm-dma2d 4002b000.dma2d: dma alloc of size 26873856 failed
[ 308.174441] [U] fail: v4l2-test-buffers.cpp(1349): q.reqbufs(node, 2)
[ 308.848959] [U] BA24 (32-bit ARGB 8-8-8-8) 2592x2592 -> RGBP (16-bit RGB 5-6-5) 2592x2592: FAIL
[ 309.535999] stm-dma2d 4002b000.dma2d: dma alloc of size 26873856 failed
[ 310.217444] [U] fail: v4l2-test-buffers.cpp(1349): q.reqbufs(node, 2)
[ 310.943592] [U] BA24 (32-bit ARGB 8-8-8-8) 2592x2592 -> AR15 (16-bit ARGB 1-5-5-5) 2592x2592: FAIL
[ 311.713854] stm-dma2d 4002b000.dma2d: dma alloc of size 26873856 failed
[ 312.508128] [U] fail: v4l2-test-buffers.cpp(1349): q.reqbufs(node, 2)
[ 313.338010] [U] BA24 (32-bit ARGB 8-8-8-8) 2592x2592 -> AR12 (16-bit ARGB 4-4-4-4) 2592x2592: FAIL
[ 317.675312] [U]
[ 318.494207] [U] Video Capture: Captured 8 buffers
[ 318.931776] [U] BA24 (32-bit ARGB 8-8-8-8) 240x320 -> BA24 (32-bit ARGB 8-8-8-8) 240x320: OK
[ 323.087768] [U]
[ 323.775244] [U] Video Capture: Captured 8 buffers
[ 324.126855] [U] BA24 (32-bit ARGB 8-8-8-8) 240x320 -> RGB3 (24-bit RGB 8-8-8) 240x320: OK
[ 327.479277] [U]
[ 328.005695] [U] Video Capture: Captured 8 buffers
[ 328.284117] [U] BA24 (32-bit ARGB 8-8-8-8) 240x320 -> RGBP (16-bit RGB 5-6-5) 240x320: OK
[ 330.830015] [U]
[ 331.260303] [U] Video Capture: Captured 8 buffers
[ 331.497654] [U] BA24 (32-bit ARGB 8-8-8-8) 240x320 -> AR15 (16-bit ARGB 1-5-5-5) 240x320: OK
[ 334.011389] [U]
[ 334.440311] [U] Video Capture: Captured 8 buffers
[ 334.677829] [U] BA24 (32-bit ARGB 8-8-8-8) 240x320 -> AR12 (16-bit ARGB 4-4-4-4) 240x320: OK
[ 337.086566] [U]
[ 337.517015] [U] Video Capture: Captured 8 buffers
[ 337.756281] [U] RGB3 (24-bit RGB 8-8-8) 1x1 -> BA24 (32-bit ARGB 8-8-8-8) 1x1: OK
[ 340.148849] [U]
[ 340.579169] [U] Video Capture: Captured 8 buffers
[ 340.823597] [U] RGB3 (24-bit RGB 8-8-8) 1x1 -> RGB3 (24-bit RGB 8-8-8) 1x1: OK
[ 343.230816] [U]
[ 343.661231] [U] Video Capture: Captured 8 buffers
[ 343.899455] [U] RGB3 (24-bit RGB 8-8-8) 1x1 -> RGBP (16-bit RGB 5-6-5) 1x1: OK
[ 346.276450] [U]
[ 346.707406] [U] Video Capture: Captured 8 buffers
[ 346.950489] [U] RGB3 (24-bit RGB 8-8-8) 1x1 -> AR15 (16-bit ARGB 1-5-5-5) 1x1: OK
[ 349.363029] [U]
[ 349.794791] [U] Video Capture: Captured 8 buffers
[ 350.034303] [U] RGB3 (24-bit RGB 8-8-8) 1x1 -> AR12 (16-bit ARGB 4-4-4-4) 1x1: OK
[ 350.526018] stm-dma2d 4002b000.dma2d: dma alloc of size 20156416 failed
[ 351.023695] [U] fail: v4l2-test-buffers.cpp(1349): q.reqbufs(node, 2)
[ 351.536683] [U] RGB3 (24-bit RGB 8-8-8) 2592x2592 -> BA24 (32-bit ARGB 8-8-8-8) 2592x2592: FAIL
[ 352.060944] stm-dma2d 4002b000.dma2d: dma alloc of size 20156416 failed
[ 352.603734] [U] fail: v4l2-test-buffers.cpp(1349): q.reqbufs(node, 2)
[ 353.185847] [U] RGB3 (24-bit RGB 8-8-8) 2592x2592 -> RGB3 (24-bit RGB 8-8-8) 2592x2592: FAIL
[ 353.814453] stm-dma2d 4002b000.dma2d: dma alloc of size 20156416 failed
[ 354.463286] [U] fail: v4l2-test-buffers.cpp(1349): q.reqbufs(node, 2)
[ 355.138479] [U] RGB3 (24-bit RGB 8-8-8) 2592x2592 -> RGBP (16-bit RGB 5-6-5) 2592x2592: FAIL
[ 355.826797] stm-dma2d 4002b000.dma2d: dma alloc of size 20156416 failed
[ 356.510828] [U] fail: v4l2-test-buffers.cpp(1349): q.reqbufs(node, 2)
[ 357.237230] [U] RGB3 (24-bit RGB 8-8-8) 2592x2592 -> AR15 (16-bit ARGB 1-5-5-5) 2592x2592: FAIL
[ 358.008304] stm-dma2d 4002b000.dma2d: dma alloc of size 20156416 failed
[ 358.803816] [U] fail: v4l2-test-buffers.cpp(1349): q.reqbufs(node, 2)
[ 359.630589] [U] RGB3 (24-bit RGB 8-8-8) 2592x2592 -> AR12 (16-bit ARGB 4-4-4-4) 2592x2592: FAIL
[ 363.960327] [U]
[ 364.781066] [U] Video Capture: Captured 8 buffers
[ 365.214046] [U] RGB3 (24-bit RGB 8-8-8) 240x320 -> BA24 (32-bit ARGB 8-8-8-8) 240x320: OK
[ 369.359436] [U]
[ 370.047235] [U] Video Capture: Captured 8 buffers
[ 370.411149] [U] RGB3 (24-bit RGB 8-8-8) 240x320 -> RGB3 (24-bit RGB 8-8-8) 240x320: OK
[ 373.744081] [U]
[ 374.268922] [U] Video Capture: Captured 8 buffers
[ 374.538707] [U] RGB3 (24-bit RGB 8-8-8) 240x320 -> RGBP (16-bit RGB 5-6-5) 240x320: OK
[ 377.084393] [U]
[ 377.514706] [U] Video Capture: Captured 8 buffers
[ 377.759132] [U] RGB3 (24-bit RGB 8-8-8) 240x320 -> AR15 (16-bit ARGB 1-5-5-5) 240x320: OK
[ 380.203358] [U]
[ 380.637202] [U] Video Capture: Captured 8 buffers
[ 380.872188] [U] RGB3 (24-bit RGB 8-8-8) 240x320 -> AR12 (16-bit ARGB 4-4-4-4) 240x320: OK
[ 383.271589] [U]
[ 383.700928] [U] Video Capture: Captured 8 buffers
[ 383.943595] [U] RGBP (16-bit RGB 5-6-5) 1x1 -> BA24 (32-bit ARGB 8-8-8-8) 1x1: OK
[ 386.328863] [U]
[ 386.764962] [U] Video Capture: Captured 8 buffers
[ 386.999766] [U] RGBP (16-bit RGB 5-6-5) 1x1 -> RGB3 (24-bit RGB 8-8-8) 1x1: OK
[ 389.410754] [U]
[ 389.843266] [U] Video Capture: Captured 8 buffers
[ 390.087088] [U] RGBP (16-bit RGB 5-6-5) 1x1 -> RGBP (16-bit RGB 5-6-5) 1x1: OK
[ 392.471763] [U]
[ 392.905730] [U] Video Capture: Captured 8 buffers
[ 393.146591] [U] RGBP (16-bit RGB 5-6-5) 1x1 -> AR15 (16-bit ARGB 1-5-5-5) 1x1: OK
[ 395.568817] [U]
[ 396.000735] [U] Video Capture: Captured 8 buffers
[ 396.239683] [U] RGBP (16-bit RGB 5-6-5) 1x1 -> AR12 (16-bit ARGB 4-4-4-4) 1x1: OK
[ 396.726035] stm-dma2d 4002b000.dma2d: dma alloc of size 13438976 failed
[ 397.228167] [U] fail: v4l2-test-buffers.cpp(1349): q.reqbufs(node, 2)
[ 397.740467] [U] RGBP (16-bit RGB 5-6-5) 2592x2592 -> BA24 (32-bit ARGB 8-8-8-8) 2592x2592: FAIL
[ 398.265046] stm-dma2d 4002b000.dma2d: dma alloc of size 13438976 failed
[ 398.806330] [U] fail: v4l2-test-buffers.cpp(1349): q.reqbufs(node, 2)
[ 399.386895] [U] RGBP (16-bit RGB 5-6-5) 2592x2592 -> RGB3 (24-bit RGB 8-8-8) 2592x2592: FAIL
[ 400.014307] stm-dma2d 4002b000.dma2d: dma alloc of size 13438976 failed
[ 400.661722] [U] fail: v4l2-test-buffers.cpp(1349): q.reqbufs(node, 2)
[ 401.334815] [U] RGBP (16-bit RGB 5-6-5) 2592x2592 -> RGBP (16-bit RGB 5-6-5) 2592x2592: FAIL
[ 402.022646] stm-dma2d 4002b000.dma2d: dma alloc of size 13438976 failed
[ 402.705189] [U] fail: v4l2-test-buffers.cpp(1349): q.reqbufs(node, 2)
[ 403.429313] [U] RGBP (16-bit RGB 5-6-5) 2592x2592 -> AR15 (16-bit ARGB 1-5-5-5) 2592x2592: FAIL
[ 404.199336] stm-dma2d 4002b000.dma2d: dma alloc of size 13438976 failed
[ 404.993926] [U] fail: v4l2-test-buffers.cpp(1349): q.reqbufs(node, 2)
[ 405.824722] [U] RGBP (16-bit RGB 5-6-5) 2592x2592 -> AR12 (16-bit ARGB 4-4-4-4) 2592x2592: FAIL
[ 410.123611] [U]
[ 410.945529] [U] Video Capture: Captured 8 buffers
[ 411.378867] [U] RGBP (16-bit RGB 5-6-5) 240x320 -> BA24 (32-bit ARGB 8-8-8-8) 240x320: OK
[ 415.488227] [U]
[ 416.177766] [U] Video Capture: Captured 8 buffers
[ 416.538441] [U] RGBP (16-bit RGB 5-6-5) 240x320 -> RGB3 (24-bit RGB 8-8-8) 240x320: OK
[ 419.826273] [U]
[ 420.354543] [U] Video Capture: Captured 8 buffers
[ 420.636913] [U] RGBP (16-bit RGB 5-6-5) 240x320 -> RGBP (16-bit RGB 5-6-5) 240x320: OK
[ 423.163619] [U]
[ 423.594915] [U] Video Capture: Captured 8 buffers
[ 423.832290] [U] RGBP (16-bit RGB 5-6-5) 240x320 -> AR15 (16-bit ARGB 1-5-5-5) 240x320: OK
[ 426.311384] [U]
[ 426.741478] [U] Video Capture: Captured 8 buffers
[ 426.982107] [U] RGBP (16-bit RGB 5-6-5) 240x320 -> AR12 (16-bit ARGB 4-4-4-4) 240x320: OK
[ 429.371663] [U]
[ 429.806431] [U] Video Capture: Captured 8 buffers
[ 430.040867] [U] AR15 (16-bit ARGB 1-5-5-5) 1x1 -> BA24 (32-bit ARGB 8-8-8-8) 1x1: OK
[ 432.455072] [U]
[ 432.887528] [U] Video Capture: Captured 8 buffers
[ 433.131724] [U] AR15 (16-bit ARGB 1-5-5-5) 1x1 -> RGB3 (24-bit RGB 8-8-8) 1x1: OK
[ 435.531286] [U]
[ 435.969388] [U] Video Capture: Captured 8 buffers
[ 436.205712] [U] AR15 (16-bit ARGB 1-5-5-5) 1x1 -> RGBP (16-bit RGB 5-6-5) 1x1: OK
[ 438.632679] [U]
[ 439.067025] [U] Video Capture: Captured 8 buffers
[ 439.307189] [U] AR15 (16-bit ARGB 1-5-5-5) 1x1 -> AR15 (16-bit ARGB 1-5-5-5) 1x1: OK
[ 441.703205] [U]
[ 442.135816] [U] Video Capture: Captured 8 buffers
[ 442.379741] [U] AR15 (16-bit ARGB 1-5-5-5) 1x1 -> AR12 (16-bit ARGB 4-4-4-4) 1x1: OK
[ 442.867674] stm-dma2d 4002b000.dma2d: dma alloc of size 13438976 failed
[ 443.364265] [U] fail: v4l2-test-buffers.cpp(1349): q.reqbufs(node, 2)
[ 443.879575] [U] AR15 (16-bit ARGB 1-5-5-5) 2592x2592 -> BA24 (32-bit ARGB 8-8-8-8) 2592x2592: FAIL
[ 444.408321] stm-dma2d 4002b000.dma2d: dma alloc of size 13438976 failed
[ 444.954042] [U] fail: v4l2-test-buffers.cpp(1349): q.reqbufs(node, 2)
[ 445.542126] [U] AR15 (16-bit ARGB 1-5-5-5) 2592x2592 -> RGB3 (24-bit RGB 8-8-8) 2592x2592: FAIL
[ 446.167742] stm-dma2d 4002b000.dma2d: dma alloc of size 13438976 failed
[ 446.813974] [U] fail: v4l2-test-buffers.cpp(1349): q.reqbufs(node, 2)
[ 447.484183] [U] AR15 (16-bit ARGB 1-5-5-5) 2592x2592 -> RGBP (16-bit RGB 5-6-5) 2592x2592: FAIL
[ 448.169137] stm-dma2d 4002b000.dma2d: dma alloc of size 13438976 failed
[ 448.857907] [U] fail: v4l2-test-buffers.cpp(1349): q.reqbufs(node, 2)
[ 449.586237] [U] AR15 (16-bit ARGB 1-5-5-5) 2592x2592 -> AR15 (16-bit ARGB 1-5-5-5) 2592x2592: FAIL
[ 450.354594] stm-dma2d 4002b000.dma2d: dma alloc of size 13438976 failed
[ 451.147715] [U] fail: v4l2-test-buffers.cpp(1349): q.reqbufs(node, 2)
[ 451.969070] [U] AR15 (16-bit ARGB 1-5-5-5) 2592x2592 -> AR12 (16-bit ARGB 4-4-4-4) 2592x2592: FAIL
[ 456.270179] [U]
[ 457.092815] [U] Video Capture: Captured 8 buffers
[ 457.527337] [U] AR15 (16-bit ARGB 1-5-5-5) 240x320 -> BA24 (32-bit ARGB 8-8-8-8) 240x320: OK
[ 461.646816] [U]
[ 462.336816] [U] Video Capture: Captured 8 buffers
[ 462.699807] [U] AR15 (16-bit ARGB 1-5-5-5) 240x320 -> RGB3 (24-bit RGB 8-8-8) 240x320: OK
[ 466.018352] [U]
[ 466.552070] [U] Video Capture: Captured 8 buffers
[ 466.828635] [U] AR15 (16-bit ARGB 1-5-5-5) 240x320 -> RGBP (16-bit RGB 5-6-5) 240x320: OK
[ 469.335696] [U]
[ 469.773367] [U] Video Capture: Captured 8 buffers
[ 470.010331] [U] AR15 (16-bit ARGB 1-5-5-5) 240x320 -> AR15 (16-bit ARGB 1-5-5-5) 240x320: OK
[ 472.487852] [U]
[ 472.925831] [U] Video Capture: Captured 8 buffers
[ 473.167824] [U] AR15 (16-bit ARGB 1-5-5-5) 240x320 -> AR12 (16-bit ARGB 4-4-4-4) 240x320: OK
[ 475.552623] [U]
[ 475.985703] [U] Video Capture: Captured 8 buffers
[ 476.229768] [U] AR12 (16-bit ARGB 4-4-4-4) 1x1 -> BA24 (32-bit ARGB 8-8-8-8) 1x1: OK
[ 478.654381] [U]
[ 479.086506] [U] Video Capture: Captured 8 buffers
[ 479.326295] [U] AR12 (16-bit ARGB 4-4-4-4) 1x1 -> RGB3 (24-bit RGB 8-8-8) 1x1: OK
[ 481.714968] [U]
[ 482.146937] [U] Video Capture: Captured 8 buffers
[ 482.390623] [U] AR12 (16-bit ARGB 4-4-4-4) 1x1 -> RGBP (16-bit RGB 5-6-5) 1x1: OK
[ 484.807477] [U]
[ 485.238512] [U] Video Capture: Captured 8 buffers
[ 485.477276] [U] AR12 (16-bit ARGB 4-4-4-4) 1x1 -> AR15 (16-bit ARGB 1-5-5-5) 1x1: OK
[ 487.860325] [U]
[ 488.292229] [U] Video Capture: Captured 8 buffers
[ 488.533258] [U] AR12 (16-bit ARGB 4-4-4-4) 1x1 -> AR12 (16-bit ARGB 4-4-4-4) 1x1: OK
[ 489.019563] stm-dma2d 4002b000.dma2d: dma alloc of size 13438976 failed
[ 489.515301] [U] fail: v4l2-test-buffers.cpp(1349): q.reqbufs(node, 2)
[ 490.029317] [U] AR12 (16-bit ARGB 4-4-4-4) 2592x2592 -> BA24 (32-bit ARGB 8-8-8-8) 2592x2592: FAIL
[ 490.556478] stm-dma2d 4002b000.dma2d: dma alloc of size 13438976 failed
[ 491.097922] [U] fail: v4l2-test-buffers.cpp(1349): q.reqbufs(node, 2)
[ 491.688235] [U] AR12 (16-bit ARGB 4-4-4-4) 2592x2592 -> RGB3 (24-bit RGB 8-8-8) 2592x2592: FAIL
[ 492.312625] stm-dma2d 4002b000.dma2d: dma alloc of size 13438976 failed
[ 492.957251] [U] fail: v4l2-test-buffers.cpp(1349): q.reqbufs(node, 2)
[ 493.626205] [U] AR12 (16-bit ARGB 4-4-4-4) 2592x2592 -> RGBP (16-bit RGB 5-6-5) 2592x2592: FAIL
[ 494.309810] stm-dma2d 4002b000.dma2d: dma alloc of size 13438976 failed
[ 494.997367] [U] fail: v4l2-test-buffers.cpp(1349): q.reqbufs(node, 2)
[ 495.724499] [U] AR12 (16-bit ARGB 4-4-4-4) 2592x2592 -> AR15 (16-bit ARGB 1-5-5-5) 2592x2592: FAIL
[ 496.490971] stm-dma2d 4002b000.dma2d: dma alloc of size 13438976 failed
[ 497.282391] [U] fail: v4l2-test-buffers.cpp(1349): q.reqbufs(node, 2)
[ 498.101859] [U] AR12 (16-bit ARGB 4-4-4-4) 2592x2592 -> AR12 (16-bit ARGB 4-4-4-4) 2592x2592: FAIL
[ 502.390697] [U]
[ 503.210399] [U] Video Capture: Captured 8 buffers
[ 503.643633] [U] AR12 (16-bit ARGB 4-4-4-4) 240x320 -> BA24 (32-bit ARGB 8-8-8-8) 240x320: OK
[ 507.747367] [U]
[ 508.434468] [U] Video Capture: Captured 8 buffers
[ 508.784910] [U] AR12 (16-bit ARGB 4-4-4-4) 240x320 -> RGB3 (24-bit RGB 8-8-8) 240x320: OK
[ 512.102183] [U]
[ 512.630437] [U] Video Capture: Captured 8 buffers
[ 512.906497] [U] AR12 (16-bit ARGB 4-4-4-4) 240x320 -> RGBP (16-bit RGB 5-6-5) 240x320: OK
[ 515.423391] [U]
[ 515.863057] [U] Video Capture: Captured 8 buffers
[ 516.100521] [U] AR12 (16-bit ARGB 4-4-4-4) 240x320 -> AR15 (16-bit ARGB 1-5-5-5) 240x320: OK
[ 518.575789] [U]
[ 519.013201] [U] Video Capture: Captured 8 buffers
[ 519.256483] [U] AR12 (16-bit ARGB 4-4-4-4) 240x320 -> AR12 (16-bit ARGB 4-4-4-4) 240x320: OK
[ 519.746238] [U] Total for stm-dma2d device /dev/video0: 121, Succeeded: 96, Failed: 25, Warnings: 0
*** BLURB HERE ***
Dillon Min (10):
media: admin-guide: add stm32-dma2d description
media: dt-bindings: media: add document for STM32 DMA2d bindings
ARM: dts: stm32: Add DMA2D support for STM32F429 series soc
ARM: dts: stm32: Enable DMA2D on STM32F469-DISCO board
media: v4l2-mem2mem: add v4l2_m2m_get_unmapped_area for no-mmu
platform
media: videobuf2: Fix the size printk format
media: v4l2-ctrls: Add V4L2_CID_COLORFX_CBCR max setting
media: v4l2-ctrls: Add RGB color effects control
clk: stm32: Fix ltdc's clock turn off by clk_disable_unused() after
system enter shell
media: stm32-dma2d: STM32 DMA2D driver
.../admin-guide/media/platform-cardlist.rst | 1 +
.../devicetree/bindings/media/st,stm32-dma2d.yaml | 71 ++
Documentation/userspace-api/media/v4l/control.rst | 9 +
arch/arm/boot/dts/stm32f429.dtsi | 10 +
arch/arm/boot/dts/stm32f469-disco.dts | 4 +
drivers/clk/clk-stm32f4.c | 4 -
.../media/common/videobuf2/videobuf2-dma-contig.c | 8 +-
drivers/media/platform/Kconfig | 12 +
drivers/media/platform/Makefile | 1 +
drivers/media/platform/stm32/Makefile | 2 +
drivers/media/platform/stm32/dma2d/dma2d-hw.c | 143 ++++
drivers/media/platform/stm32/dma2d/dma2d-regs.h | 113 ++++
drivers/media/platform/stm32/dma2d/dma2d.c | 739 +++++++++++++++++++++
drivers/media/platform/stm32/dma2d/dma2d.h | 135 ++++
drivers/media/v4l2-core/v4l2-ctrls-defs.c | 12 +-
drivers/media/v4l2-core/v4l2-mem2mem.c | 21 +
include/media/v4l2-mem2mem.h | 5 +
include/uapi/linux/v4l2-controls.h | 4 +-
18 files changed, 1283 insertions(+), 11 deletions(-)
create mode 100644 Documentation/devicetree/bindings/media/st,stm32-dma2d.yaml
create mode 100644 drivers/media/platform/stm32/dma2d/dma2d-hw.c
create mode 100644 drivers/media/platform/stm32/dma2d/dma2d-regs.h
create mode 100644 drivers/media/platform/stm32/dma2d/dma2d.c
create mode 100644 drivers/media/platform/stm32/dma2d/dma2d.h
--
2.7.4
3 months, 2 weeks
Online Service Provider
by flora davis
If you are facing any issues regarding Bitdefender, Garmin, Rand McNally dock , ij.start.cannon , AOL Mail , network privacy shield , Cash app login , netgear extender setup , www.amazon.com/mytv , my.avast.com , Roadrunner Email , TomTom Home , 123.hp.com , Avast download , Office 365 login ,belkin range Webroot Download , Extender.linksys.com Avast support , HP Printer support , BT Mail and Mywifiext you will get an instant online solution. For more details visit this link which is given below:
http://bitdefender-centrals.com/
http://randmcnallydockz.com/
http://ijstartcanonn.com/
http://garmincomexpress.live/
http://myaolmailx.com/
http://www.driversandshield.com/network-privacy-shield/
http://technicalserviceprovider5.blogspot.com/
http://bitdefendercentral7.blogspot.com/
http://sites.google.com/view/bitdefendercentralx/home
http://sites.google.com/view/garmin-dot-com-slash-express/home
http://garmindotcomexpress.blogspot.com/
http://randmcnallydock5.blogspot.com/
http://sites.google.com/view/install-rand-mcnally-dock/home?authuser=1
http://sites.google.com/site/ijstartcannon55/
http://ijstartcannon5.blogspot.com/
http://sites.google.com/d/1bJc_3UKFx7SIFYgNgCBtoffLign8Z5QG/p/1vVJ3igXjnd...
http://aolmail5.blogspot.com
http://sites.google.com/view/cash-app-login-usa
http://sites.google.com/view/netgear-extender-setup-us
http://sites.google.com/view/wwwamazoncommytv-code
http://sites.google.com/view/myavastcom-guide
http://sites.google.com/view/myroadrunneremail
http://sites.google.com/view/tomtomhome-help
http://sites.google.com/view/123hpcomsetup-now
http://sites.google.com/view/avast-download-now
http://sites.google.com/view/office365loginnow
http://sites.google.com/view/belkinrangeguide
http://sites.google.com/view/webrootdownload-now
http://sites.google.com/view/extenderlinksys-com
http://contactassistance.com/avast-support/
http://contactassistance.com/hp-printer-support/
http://sites.google.com/view/btmail-uk
https://flora.wgz.cz/rubriky/sluzby/online-service-provider
http://www.good-tutorials.com/users/florina
https://duckduckgo.com/?q=+http%3A%2F%2Fbitdefender-centrals.com%2F&t=hy&...
https://visual.ly/community/Others/technology/online-service-provider
https://career.habr.com/shashi-gandhi
https://pinshape.com/users/859867-flora#designs-tab-open
https://www.sbnation.com/users/floradavis
https://www.polygon.com/users/floradavis
https://www.intothecalderon.com/users/floradavis
https://www.sbnation.com/users/floradavis
https://www.rumbleinthegarden.com/users/floradavis/
https://www.nucksmisconduct.com/users/floradavis
https://www.bringonthecats.com/users/floradavis/
https://www.hottimeinoldtown.com/users/floradavis
https://www.collegecrosse.com/users/floradavis
https://www.anaheimcalling.com/users/floradavis
https://www.serpentsofmadonnina.com/users/floradavis
https://www.anonymouseagle.com/users/floradavis
https://www.downthedrive.com/users/floradavis
https://www.villarrealusa.com/users/floradavis
https://www.minerrush.com/users/floradavis
https://muabs.com/profile/flora/
https://pastelink.net/3ddan
https://www.forexfactory.com/floradavis
https://www.ted.com/profiles/22168479
https://amara.org/en/profiles/profile/XL5RMz0LjLvWYg0Gm8p8ld7xH-Lo60pJIZV...
https://demodrop.com/user/789446
https://creator.wonderhowto.com/floradavis/
http://diendan.lyhocdongphuong.org.vn/profile/54229-flora/?tab=field_core...
https://repositorio.cnmp.mp.br/snippets/502
https://www.myinfer.com/services/technology/chelannur/online-service-prov...
http://trvl.uz/members/flora.38269/#about
https://forum.igrowgame.co.uk/index.php?action=profile;area=summary;u=419
https://forum.rogalia.ru/user/flora
https://hasster.com/flora
https://openspaces.platoniq.net/profiles/flora/timeline?locale=en
https://www.chandigarhcity.com/groups/online-service-provider-1782056784/
http://www.renexus.org/network/read-blog/2510
https://social.artisanssoft.com/read-blog/2925
https://corosocial.com/flora
https://kaalama.org/read-blog/37986
https://fireland.aliv.us/read-blog/964
https://uconnect.ae/flora
https://selfieoo.com/flora
https://www.promorapid.com/read-blog/51070
https://www.social-vape.com/read-blog/39863
https://worlegram.com/read-blog/9179
https://acrochat.com/read-blog/54979
https://weoneit.com/flora
https://www.ihker.com/flora
https://cliqafriq.com/read-blog/86887
https://www.buzzbii.com/flora
https://chikkahub.com/read-blog/11981
https://heroes.app/flora
http://lifestory.roleplayproject.com/floradavis
https://trumpbookusa.com/floradavis
https://www.recentstatus.com/flora
https://www.login-faq.com/http:--bitdefender-centrals.com-/
https://linkorado.com/browse/computers/software/
https://quisitio.com/go?ss=sb&q=http%3A%2F%2Fbitdefender-centrals.com%2F
https://www.webscan.cc/site_bitdefender-centrals.com/
https://sakyant.org/http-bitdefender-centralscom-
https://loguk.de/search.php?c=http%3A%2F%2Fbitdefender-centrals.com%2F
https://newnationnews.org/centrals/http-bitdefender-centrals-com-4002860
https://www.widerightnattylite.com/users/floradavis
https://www.ubbullrun.com/users/floradavis/
https://www.nevermanagealone.com/users/floradavis
https://www.againstallenemies.com/users/floradavis/
https://www.frogsowar.com/users/floradavis/
https://www.ourdailybears.com/users/floradavis
https://www.ruleoftree.com/users/floradavis
https://www.ralphiereport.com/users/floradavis
https://www.thechampaignroom.com/users/floradavis
https://www.onefootdown.com/users/floradavis
https://www.casualhoya.com/users/floradavis
https://www.rockchalktalk.com/users/floradavis
https://www.pacifictakes.com/users/floradavis
https://www.conquestchronicles.com/users/floradavis
https://www.crimsonquarry.com/users/floradavis
https://www.vanquishthefoe.com/users/floradavis
https://www.gobblercountry.com/users/floradavis
https://www.forwhomthecowbelltolls.com/users/floradavis
https://www.underdogdynasty.com/users/floradavis
https://www.slipperstillfits.com/users/floradavis
4 months, 1 week
[aa:mapcount_deshare 20/27] mm/gup.c:2756:3: error: implicit declaration of function 'mm_set_has_pinned_flag'
by kernel test robot
tree: https://git.kernel.org/pub/scm/linux/kernel/git/andrea/aa.git mapcount_deshare
head: 3e2f198cce0c1792ad71d6d81974b091019b6483
commit: 8dec302e87453234fc7ac1cf4d09e4d577a06cf3 [20/27] mm: gup: pack has_pinned in MMF_HAS_PINNED
config: arm-randconfig-r014-20210511 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project a0fed635fe1701470062495a6ffee1c608f3f1bc)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install arm cross compiling tool for clang build
# apt-get install binutils-arm-linux-gnueabi
# https://git.kernel.org/pub/scm/linux/kernel/git/andrea/aa.git/commit/?id=...
git remote add aa https://git.kernel.org/pub/scm/linux/kernel/git/andrea/aa.git
git fetch --no-tags aa mapcount_deshare
git checkout 8dec302e87453234fc7ac1cf4d09e4d577a06cf3
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=arm
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>):
>> mm/gup.c:2756:3: error: implicit declaration of function 'mm_set_has_pinned_flag' [-Werror,-Wimplicit-function-declaration]
mm_set_has_pinned_flag(¤t->mm->flags);
^
1 error generated.
vim +/mm_set_has_pinned_flag +2756 mm/gup.c
2740
2741 static int internal_get_user_pages_fast(unsigned long start,
2742 unsigned long nr_pages,
2743 unsigned int gup_flags,
2744 struct page **pages)
2745 {
2746 unsigned long len, end;
2747 unsigned long nr_pinned;
2748 int ret;
2749
2750 if (WARN_ON_ONCE(gup_flags & ~(FOLL_WRITE | FOLL_LONGTERM |
2751 FOLL_FORCE | FOLL_PIN | FOLL_GET |
2752 FOLL_FAST_ONLY)))
2753 return -EINVAL;
2754
2755 if (gup_flags & FOLL_PIN)
> 2756 mm_set_has_pinned_flag(¤t->mm->flags);
2757
2758 if (!(gup_flags & FOLL_FAST_ONLY))
2759 might_lock_read(¤t->mm->mmap_lock);
2760
2761 start = untagged_addr(start) & PAGE_MASK;
2762 len = nr_pages << PAGE_SHIFT;
2763 if (check_add_overflow(start, len, &end))
2764 return 0;
2765 if (unlikely(!access_ok((void __user *)start, len)))
2766 return -EFAULT;
2767
2768 nr_pinned = lockless_pages_from_mm(start, end, gup_flags, pages);
2769 if (nr_pinned == nr_pages || gup_flags & FOLL_FAST_ONLY)
2770 return nr_pinned;
2771
2772 /* Slow path: try to get the remaining pages with get_user_pages */
2773 start += nr_pinned << PAGE_SHIFT;
2774 pages += nr_pinned;
2775 ret = __gup_longterm_unlocked(start, nr_pages - nr_pinned, gup_flags,
2776 pages);
2777 if (ret < 0) {
2778 /*
2779 * The caller has to unpin the pages we already pinned so
2780 * returning -errno is not an option
2781 */
2782 if (nr_pinned)
2783 return nr_pinned;
2784 return ret;
2785 }
2786 return ret + nr_pinned;
2787 }
2788
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
5 months
[PATCH v4 0/3] Add ilitek ili9341 panel driver
by dillon.minfei@gmail.com
From: Dillon Min <dillon.minfei(a)gmail.com>
Since the st,sf-tc240t-9370-t dts binding already exist in stm32f429-disco.dts
but, the panel driver didn't get accepted from mainline. it's time to submit
patch fot it.
This driver can support two different interface by different dts bindings:
- spi+dpi, use spi to configure register, dpi for graphic data.
st,sf-tc240t-9370-t
- only spi, just like tiny/ili9341.c (actually, this part is copy from tiny)
adafruit,yx240qv29
I was submited the first patch last year, you can find it at [1].
this patch has one major difference from that one, which is replace the low
level communication way, from spi_sync() to mipi_dbi_{command,
command_stackbuf}() interface, referred from Linus's patch [2].
both the two dpi/dbi interface was tested on stm32f429-disco board, if anyone
want to verify this patch, you need apply the clk patch for this board first,
you can get it from [3].
[1] "drm/panel: Add ilitek ili9341 panel driver"
https://lore.kernel.org/lkml/1590378348-8115-7-git-send-email-dillon.minf...
[2] "drm/panel: s6e63m0: Switch to DBI abstraction for SPI"
https://lore.kernel.org/dri-devel/20210611214243.669892-1-linus.walleij@l...
[3]
https://lore.kernel.org/lkml/1590378348-8115-6-git-send-email-dillon.minf...
v4:
- fix m68k-allmodconfig build error which reported by lkp, thanks.
- add Copyright 2018 David Lechner <david(a)lechnology.com>.
v3 link:
https://lore.kernel.org/lkml/1627013203-23099-1-git-send-email-dillon.min...
v3:
- add Fixes tags.
- collect reviewed-by tags from linus and jagan.
- replace DRM_ERROR() with dev_err() or drm_err().
- remove kernel-doc markers from struct ili9341_config{}.
- reorder include headers.
- remove the struct device *dev from struct ili9341{}.
- restructure the ili9341_probe() function, add two ili9341_{dbi,dpi)_probe()
to make it more readable according to jagan's suggestion, thanks.
for the full drm driver exist in drm/panel need Sam and Laurent's feedback.
so, not cover this part at this time, will be update later.
v2 link:
https://lore.kernel.org/lkml/1626853288-31223-1-git-send-email-dillon.min...
v2:
- replace vcc regulator to bulk regulators in driver, from linus suggestion.
- fix dtbs_check warnings on ili9341 dts binding check.
- add bulk regulation node in ilitek,ili9341.yaml.
v1 link:
https://lore.kernel.org/lkml/1626430843-23823-1-git-send-email-dillon.min...
Dillon Min (3):
dt-bindings: display: panel: Add ilitek ili9341 panel bindings
ARM: dts: stm32: fix dtbs_check warning on ili9341 dts binding
drm/panel: Add ilitek ili9341 panel driver
.../bindings/display/panel/ilitek,ili9341.yaml | 78 ++
arch/arm/boot/dts/stm32f429-disco.dts | 2 +-
drivers/gpu/drm/panel/Kconfig | 12 +
drivers/gpu/drm/panel/Makefile | 1 +
drivers/gpu/drm/panel/panel-ilitek-ili9341.c | 792 +++++++++++++++++++++
5 files changed, 884 insertions(+), 1 deletion(-)
create mode 100644 Documentation/devicetree/bindings/display/panel/ilitek,ili9341.yaml
create mode 100644 drivers/gpu/drm/panel/panel-ilitek-ili9341.c
--
1.9.1
5 months, 4 weeks
[PATCH v2] sound/soc: adds TAS5754M digital input amplifier component driver
by Joerg Schambacher
Adds a minimum component driver to run the amplifier in I2S master
mode only from standard audio clocks. Therefore, it only allows
44.1, 88.2, 176.4, 48, 96 and 192ksps with 16, 20, 24 and 32 bits
sample size. Digital volume control and the -6dB switch are supported.
Signed-off-by: Joerg Schambacher <joerg(a)hifiberry.com>
---
Added of_match_ptr() macro to fix the error when compiling on non CONFIG_OF
systems.
Joerg
sound/soc/codecs/Kconfig | 8 +
sound/soc/codecs/Makefile | 2 +
sound/soc/codecs/tas5754m.c | 547 ++++++++++++++++++++++++++++++++++++
sound/soc/codecs/tas5754m.h | 259 +++++++++++++++++
4 files changed, 816 insertions(+)
create mode 100644 sound/soc/codecs/tas5754m.c
create mode 100644 sound/soc/codecs/tas5754m.h
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index 82ee233a269d..cf0584948fcf 100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -210,6 +210,7 @@ config SND_SOC_ALL_CODECS
imply SND_SOC_TAS5086
imply SND_SOC_TAS571X
imply SND_SOC_TAS5720
+ imply SND_SOC_TAS5754M
imply SND_SOC_TAS6424
imply SND_SOC_TDA7419
imply SND_SOC_TFA9879
@@ -1419,6 +1420,13 @@ config SND_SOC_TAS5720
Enable support for Texas Instruments TAS5720L/M high-efficiency mono
Class-D audio power amplifiers.
+config SND_SOC_TAS5754M
+ tristate "Texas Instruments TAS5754M Digital Input Audio amplifier"
+ depends on I2C
+ help
+ Enable support for Texas Instruments TAS5754M digital input
+ Class-D audio power amplifiers.
+
config SND_SOC_TAS6424
tristate "Texas Instruments TAS6424 Quad-Channel Audio amplifier"
depends on I2C
diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile
index 8dcea2c4604a..39984900258a 100644
--- a/sound/soc/codecs/Makefile
+++ b/sound/soc/codecs/Makefile
@@ -227,6 +227,7 @@ snd-soc-sti-sas-objs := sti-sas.o
snd-soc-tas5086-objs := tas5086.o
snd-soc-tas571x-objs := tas571x.o
snd-soc-tas5720-objs := tas5720.o
+snd-soc-tas5754m-objs := tas5754m.o
snd-soc-tas6424-objs := tas6424.o
snd-soc-tda7419-objs := tda7419.o
snd-soc-tas2770-objs := tas2770.o
@@ -555,6 +556,7 @@ obj-$(CONFIG_SND_SOC_TAS2764) += snd-soc-tas2764.o
obj-$(CONFIG_SND_SOC_TAS5086) += snd-soc-tas5086.o
obj-$(CONFIG_SND_SOC_TAS571X) += snd-soc-tas571x.o
obj-$(CONFIG_SND_SOC_TAS5720) += snd-soc-tas5720.o
+obj-$(CONFIG_SND_SOC_TAS5754M) += snd-soc-tas5754m.o
obj-$(CONFIG_SND_SOC_TAS6424) += snd-soc-tas6424.o
obj-$(CONFIG_SND_SOC_TDA7419) += snd-soc-tda7419.o
obj-$(CONFIG_SND_SOC_TAS2770) += snd-soc-tas2770.o
diff --git a/sound/soc/codecs/tas5754m.c b/sound/soc/codecs/tas5754m.c
new file mode 100644
index 000000000000..aef2c65acc26
--- /dev/null
+++ b/sound/soc/codecs/tas5754m.c
@@ -0,0 +1,547 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Driver for the TAS5754M Audio Amplifier in Master mode (only)
+ * supports only standard audio frequencies 44.1 to 192 ksps
+ *
+ * Author: Joerg Schambacher <joerg(a)hifiberry.com>
+ * with fragments from Andy Liu <andy-liu(a)ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ */
+
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#include <linux/clk.h>
+#include <linux/slab.h>
+#include <linux/of.h>
+#include <linux/init.h>
+#include <linux/i2c.h>
+#include <linux/regmap.h>
+#include <linux/delay.h>
+
+#include <sound/tlv.h>
+#include <sound/soc.h>
+#include <sound/pcm.h>
+#include <sound/pcm_params.h>
+#include <sound/initval.h>
+
+#include "tas5754m.h"
+
+#define TAS5754M_RATES (SNDRV_PCM_RATE_48000 | \
+ SNDRV_PCM_RATE_96000 | \
+ SNDRV_PCM_RATE_192000 | \
+ SNDRV_PCM_RATE_44100 | \
+ SNDRV_PCM_RATE_88200 | \
+ SNDRV_PCM_RATE_176400)
+#define TAS5754M_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \
+ SNDRV_PCM_FMTBIT_S20_LE | \
+ SNDRV_PCM_FMTBIT_S24_LE | \
+ SNDRV_PCM_FMTBIT_S32_LE)
+
+
+static const struct reg_sequence tas5754m_init_sequence[] = {
+ { TAS5754M_RESET, 0x00 },
+ { TAS5754M_MUTE, 0x11 },
+ { TAS5754M_POWER, 0x00 },
+ { TAS5754M_PLL_EN, 0x00 },
+ { TAS5754M_RESET, 0x00 },
+ { TAS5754M_GPIO_OUTPUT_3, 0x02 },
+ { TAS5754M_GPIO_OUTPUT_4, 0x02 },
+ { TAS5754M_GPIO_OUTPUT_6, 0x02 },
+ { TAS5754M_GPIO_EN, 0x2c },
+ { TAS5754M_GPIO_CONTROL_1, 0x04 },
+ { TAS5754M_BCLK_LRCLK_CFG, 0x11 },
+ { TAS5754M_MASTER_MODE, 0x7c },
+ { TAS5754M_ERROR_DETECT, 0x77 },
+ { TAS5754M_PLL_EN, 0x01 },
+ { TAS5754M_PLL_REF, 0x00 },
+ { TAS5754M_PLL_COEFF_0, 0x03 },
+ { TAS5754M_PLL_COEFF_1, 0x0c },
+ { TAS5754M_PLL_COEFF_2, 0x00 },
+ { TAS5754M_PLL_COEFF_3, 0x00 },
+ { TAS5754M_PLL_COEFF_4, 0x00 },
+ { TAS5754M_DAC_REF, 0x30 },
+ { TAS5754M_DSP_CLKDIV, 0x01 },
+ { TAS5754M_DAC_CLKDIV, 0x0f },
+ { TAS5754M_NCP_CLKDIV, 0x03 },
+ { TAS5754M_OSR_CLKDIV, 0x00 },
+ { TAS5754M_FS_SPEED_MODE, 0x00 },
+ { TAS5754M_MASTER_CLKDIV_1, 0x0f },
+ { TAS5754M_MASTER_CLKDIV_2, 0x1f },
+ { TAS5754M_I2S_1, 0x00 },
+ { TAS5754M_I2S_2, 0x01 },
+ { TAS5754M_PLL_EN, 0x01 },
+ { TAS5754M_MASTER_MODE, 0x7f },
+ { TAS5754M_MUTE, 0x11 },
+};
+
+static const struct reg_default tas5754m_reg_defaults[] = {
+ { TAS5754M_RESET, 0x00 },
+ { TAS5754M_POWER, 0x00 },
+ { TAS5754M_MUTE, 0x00 },
+ { TAS5754M_DSP, 0x00 },
+ { TAS5754M_PLL_REF, 0x00 },
+ { TAS5754M_DAC_REF, 0x00 },
+ { TAS5754M_DAC_ROUTING, 0x11 },
+ { TAS5754M_DSP_PROGRAM, 0x01 },
+ { TAS5754M_CLKDET, 0x00 },
+ { TAS5754M_AUTO_MUTE, 0x00 },
+ { TAS5754M_ERROR_DETECT, 0x00 },
+ { TAS5754M_DIGITAL_VOLUME_1, 0x00 },
+ { TAS5754M_DIGITAL_VOLUME_2, 0x30 },
+ { TAS5754M_DIGITAL_VOLUME_3, 0x30 },
+ { TAS5754M_DIGITAL_MUTE_1, 0x22 },
+ { TAS5754M_DIGITAL_MUTE_2, 0x00 },
+ { TAS5754M_DIGITAL_MUTE_3, 0x07 },
+ { TAS5754M_OUTPUT_AMPLITUDE, 0x00 },
+ { TAS5754M_ANALOG_GAIN_CTRL, 0x00 },
+ { TAS5754M_UNDERVOLTAGE_PROT, 0x00 },
+ { TAS5754M_ANALOG_MUTE_CTRL, 0x00 },
+ { TAS5754M_ANALOG_GAIN_BOOST, 0x00 },
+ { TAS5754M_VCOM_CTRL_1, 0x00 },
+ { TAS5754M_VCOM_CTRL_2, 0x01 },
+ { TAS5754M_BCLK_LRCLK_CFG, 0x00 },
+ { TAS5754M_MASTER_MODE, 0x7c },
+ { TAS5754M_GPIO_DACIN, 0x00 },
+ { TAS5754M_GPIO_PLLIN, 0x00 },
+ { TAS5754M_SYNCHRONIZE, 0x10 },
+ { TAS5754M_PLL_COEFF_0, 0x00 },
+ { TAS5754M_PLL_COEFF_1, 0x00 },
+ { TAS5754M_PLL_COEFF_2, 0x00 },
+ { TAS5754M_PLL_COEFF_3, 0x00 },
+ { TAS5754M_PLL_COEFF_4, 0x00 },
+ { TAS5754M_DSP_CLKDIV, 0x00 },
+ { TAS5754M_DAC_CLKDIV, 0x00 },
+ { TAS5754M_NCP_CLKDIV, 0x00 },
+ { TAS5754M_OSR_CLKDIV, 0x00 },
+ { TAS5754M_MASTER_CLKDIV_1, 0x00 },
+ { TAS5754M_MASTER_CLKDIV_2, 0x00 },
+ { TAS5754M_FS_SPEED_MODE, 0x00 },
+ { TAS5754M_IDAC_1, 0x01 },
+ { TAS5754M_IDAC_2, 0x00 },
+};
+
+static bool tas5754m_readable(struct device *dev, unsigned int reg)
+{
+ switch (reg) {
+ case TAS5754M_RESET:
+ case TAS5754M_POWER:
+ case TAS5754M_MUTE:
+ case TAS5754M_PLL_EN:
+ case TAS5754M_SPI_MISO_FUNCTION:
+ case TAS5754M_DSP:
+ case TAS5754M_GPIO_EN:
+ case TAS5754M_BCLK_LRCLK_CFG:
+ case TAS5754M_DSP_GPIO_INPUT:
+ case TAS5754M_MASTER_MODE:
+ case TAS5754M_PLL_REF:
+ case TAS5754M_DAC_REF:
+ case TAS5754M_GPIO_DACIN:
+ case TAS5754M_GPIO_PLLIN:
+ case TAS5754M_SYNCHRONIZE:
+ case TAS5754M_PLL_COEFF_0:
+ case TAS5754M_PLL_COEFF_1:
+ case TAS5754M_PLL_COEFF_2:
+ case TAS5754M_PLL_COEFF_3:
+ case TAS5754M_PLL_COEFF_4:
+ case TAS5754M_DSP_CLKDIV:
+ case TAS5754M_DAC_CLKDIV:
+ case TAS5754M_NCP_CLKDIV:
+ case TAS5754M_OSR_CLKDIV:
+ case TAS5754M_MASTER_CLKDIV_1:
+ case TAS5754M_MASTER_CLKDIV_2:
+ case TAS5754M_FS_SPEED_MODE:
+ case TAS5754M_IDAC_1:
+ case TAS5754M_IDAC_2:
+ case TAS5754M_ERROR_DETECT:
+ case TAS5754M_I2S_1:
+ case TAS5754M_I2S_2:
+ case TAS5754M_DAC_ROUTING:
+ case TAS5754M_DSP_PROGRAM:
+ case TAS5754M_CLKDET:
+ case TAS5754M_AUTO_MUTE:
+ case TAS5754M_DIGITAL_VOLUME_1:
+ case TAS5754M_DIGITAL_VOLUME_2:
+ case TAS5754M_DIGITAL_VOLUME_3:
+ case TAS5754M_DIGITAL_MUTE_1:
+ case TAS5754M_DIGITAL_MUTE_2:
+ case TAS5754M_DIGITAL_MUTE_3:
+ case TAS5754M_GPIO_OUTPUT_1:
+ case TAS5754M_GPIO_OUTPUT_2:
+ case TAS5754M_GPIO_OUTPUT_3:
+ case TAS5754M_GPIO_OUTPUT_4:
+ case TAS5754M_GPIO_OUTPUT_5:
+ case TAS5754M_GPIO_OUTPUT_6:
+ case TAS5754M_GPIO_CONTROL_1:
+ case TAS5754M_GPIO_CONTROL_2:
+ case TAS5754M_OVERFLOW:
+ case TAS5754M_RATE_DET_1:
+ case TAS5754M_RATE_DET_2:
+ case TAS5754M_RATE_DET_3:
+ case TAS5754M_RATE_DET_4:
+ case TAS5754M_CLOCK_STATUS:
+ case TAS5754M_ANALOG_MUTE_DET:
+ case TAS5754M_GPIN:
+ case TAS5754M_DIGITAL_MUTE_DET:
+ case TAS5754M_OUTPUT_AMPLITUDE:
+ case TAS5754M_ANALOG_GAIN_CTRL:
+ case TAS5754M_UNDERVOLTAGE_PROT:
+ case TAS5754M_ANALOG_MUTE_CTRL:
+ case TAS5754M_ANALOG_GAIN_BOOST:
+ case TAS5754M_VCOM_CTRL_1:
+ case TAS5754M_VCOM_CTRL_2:
+ case TAS5754M_CRAM_CTRL:
+ case TAS5754M_FLEX_A:
+ case TAS5754M_FLEX_B:
+ return true;
+ default:
+ return reg < 0x7f;
+ }
+}
+
+static bool tas5754m_volatile(struct device *dev, unsigned int reg)
+{
+ switch (reg) {
+ case TAS5754M_PLL_EN:
+ case TAS5754M_OVERFLOW:
+ case TAS5754M_RATE_DET_1:
+ case TAS5754M_RATE_DET_2:
+ case TAS5754M_RATE_DET_3:
+ case TAS5754M_RATE_DET_4:
+ case TAS5754M_CLOCK_STATUS:
+ case TAS5754M_ANALOG_MUTE_DET:
+ case TAS5754M_GPIN:
+ case TAS5754M_DIGITAL_MUTE_DET:
+ case TAS5754M_CRAM_CTRL:
+ return true;
+ default:
+ return reg < 0x7f;
+ }
+}
+
+struct tas5754m_priv {
+ struct regmap *regmap;
+ struct clk *sclk;
+};
+
+static const struct regmap_range_cfg tas5754m_range = {
+ .name = "Pages",
+ .range_min = TAS5754M_VIRT_BASE,
+ .range_max = TAS5754M_MAX_REGISTER,
+ .selector_reg = TAS5754M_PAGE,
+ .selector_mask = 0x7f,
+ .window_start = 0,
+ .window_len = 128,
+};
+
+const struct regmap_config tas5754m_regmap = {
+ .reg_bits = 8,
+ .val_bits = 8,
+
+ .ranges = &tas5754m_range,
+ .num_ranges = 1,
+ .max_register = TAS5754M_MAX_REGISTER,
+
+ .reg_defaults = tas5754m_reg_defaults,
+ .num_reg_defaults = ARRAY_SIZE(tas5754m_reg_defaults),
+ .readable_reg = tas5754m_readable,
+ .volatile_reg = tas5754m_volatile,
+
+ .cache_type = REGCACHE_RBTREE,
+};
+EXPORT_SYMBOL_GPL(tas5754m_regmap);
+
+static const DECLARE_TLV_DB_SCALE(digital_tlv, -10350, 50, 1);
+static const DECLARE_TLV_DB_SCALE(analog_tlv, -600, 600, 0);
+
+static const struct snd_kcontrol_new tas5754m_controls[] = {
+SOC_DOUBLE_R_TLV("Digital Playback Volume", TAS5754M_DIGITAL_VOLUME_2,
+ TAS5754M_DIGITAL_VOLUME_3, 0, 255, 1, digital_tlv),
+SOC_DOUBLE_TLV("Analog Playback Volume", TAS5754M_ANALOG_GAIN_CTRL,
+ TAS5754M_LAGN_SHIFT, TAS5754M_RAGN_SHIFT, 1, 1, analog_tlv),
+};
+
+static int tas5754m_set_bias_level(struct snd_soc_component *component,
+ enum snd_soc_bias_level level)
+{
+ struct tas5754m_priv *tas5754m =
+ snd_soc_component_get_drvdata(component);
+ int ret;
+
+ switch (level) {
+ case SND_SOC_BIAS_ON:
+ case SND_SOC_BIAS_PREPARE:
+ break;
+
+ case SND_SOC_BIAS_STANDBY:
+ ret = regmap_update_bits(tas5754m->regmap,
+ TAS5754M_POWER, TAS5754M_RQST, 0);
+ if (ret != 0) {
+ dev_err(component->dev,
+ "Failed to remove standby: %d\n", ret);
+ return ret;
+ }
+ break;
+
+ case SND_SOC_BIAS_OFF:
+ ret = regmap_update_bits(tas5754m->regmap,
+ TAS5754M_POWER, TAS5754M_RQST, TAS5754M_RQST);
+ if (ret != 0) {
+ dev_err(component->dev,
+ "Failed to request standby: %d\n", ret);
+ return ret;
+ }
+ break;
+ }
+
+ return 0;
+}
+
+static int tas5754m_hw_params(struct snd_pcm_substream *substream,
+ struct snd_pcm_hw_params *params,
+ struct snd_soc_dai *dai)
+{
+ struct snd_soc_component *component = dai->component;
+ struct tas5754m_priv *tas5754m =
+ snd_soc_component_get_drvdata(component);
+ unsigned long bclk;
+ unsigned long mclk;
+ int sample_len;
+ int bclk_div;
+ int lrclk_div;
+ int alen;
+ int ret;
+
+ switch (params_width(params)) {
+ case 16:
+ sample_len = 16;
+ alen = TAS5754M_ALEN_16;
+ break;
+ case 20:
+ sample_len = 32;
+ alen = TAS5754M_ALEN_20;
+ break;
+ case 24:
+ sample_len = 32;
+ alen = TAS5754M_ALEN_24;
+ break;
+ case 32:
+ sample_len = 32;
+ alen = TAS5754M_ALEN_32;
+ break;
+ default:
+ dev_err(component->dev, "Unsupported sample size: %d\n",
+ params_width(params));
+ return -EINVAL;
+ }
+ ret = regmap_update_bits(tas5754m->regmap, TAS5754M_I2S_1, alen, alen);
+ if (ret != 0) {
+ dev_err(component->dev,
+ "Cannot set sample size: %d\n", ret);
+ return ret;
+ }
+
+ switch (params_rate(params)) {
+ case 44100:
+ case 48000:
+ ret = regmap_write(tas5754m->regmap,
+ TAS5754M_FS_SPEED_MODE, TAS5754M_FSSP_48KHZ);
+ break;
+ case 88200:
+ case 96000:
+ ret = regmap_write(tas5754m->regmap,
+ TAS5754M_FS_SPEED_MODE, TAS5754M_FSSP_96KHZ);
+ break;
+ case 176400:
+ case 192000:
+ ret = regmap_write(tas5754m->regmap,
+ TAS5754M_FS_SPEED_MODE, TAS5754M_FSSP_192KHZ);
+ break;
+ default:
+ dev_err(component->dev, "Sample rate not supported: %d\n",
+ params_rate(params));
+ return -EINVAL;
+ }
+ if (ret != 0) {
+ dev_err(component->dev, "Failed to config PLL\n");
+ return ret;
+ }
+
+
+ mclk = clk_get_rate(tas5754m->sclk);
+ bclk = sample_len * 2 * params_rate(params);
+ bclk_div = mclk / bclk;
+ lrclk_div = sample_len * 2;
+
+ // stop LR / SCLK clocks
+ ret = regmap_write(tas5754m->regmap, TAS5754M_MASTER_MODE, 0x7c);
+
+ // set SCLK divider
+ ret |= regmap_write(tas5754m->regmap, TAS5754M_MASTER_CLKDIV_1,
+ bclk_div - 1);
+
+ // set LRCLK divider
+ ret |= regmap_write(tas5754m->regmap, TAS5754M_MASTER_CLKDIV_2,
+ lrclk_div - 1);
+
+ // restart LR / SCLK clocks
+ ret |= regmap_write(tas5754m->regmap, TAS5754M_MASTER_MODE, 0x7f);
+ if (ret != 0) {
+ dev_err(component->dev, "Failed to config PLL\n");
+ return ret;
+ }
+
+ return 0;
+}
+
+static const struct snd_soc_component_driver tas5754m_soc_component = {
+ .set_bias_level = tas5754m_set_bias_level,
+ .idle_bias_on = true,
+ .controls = tas5754m_controls,
+ .num_controls = ARRAY_SIZE(tas5754m_controls),
+};
+
+static int tas5754m_mute(struct snd_soc_dai *dai, int mute, int stream)
+{
+ struct snd_soc_component *component = dai->component;
+
+ if (mute) {
+ snd_soc_component_write(component, TAS5754M_MUTE, 0x11);
+ } else {
+ usleep_range(1000, 2000);
+ snd_soc_component_write(component, TAS5754M_MUTE, 0x00);
+ }
+ return 0;
+}
+
+static const struct snd_soc_dai_ops tas5754m_dai_ops = {
+ .mute_stream = tas5754m_mute,
+ .hw_params = tas5754m_hw_params,
+};
+
+static struct snd_soc_dai_driver tas5754m_dai = {
+ .name = "tas5754m-amplifier",
+ .playback = {
+ .stream_name = "Playback",
+ .channels_min = 2,
+ .channels_max = 2,
+ .rates = TAS5754M_RATES,
+ .formats = TAS5754M_FORMATS,
+ },
+ .ops = &tas5754m_dai_ops,
+};
+
+static int tas5754m_probe(struct device *dev, struct regmap *regmap)
+{
+ struct tas5754m_priv *tas5754m;
+ int ret;
+
+ tas5754m = devm_kzalloc(dev, sizeof(struct tas5754m_priv), GFP_KERNEL);
+ if (!tas5754m)
+ return -ENOMEM;
+
+ dev_set_drvdata(dev, tas5754m);
+ tas5754m->regmap = regmap;
+
+ ret = regmap_multi_reg_write(regmap, tas5754m_init_sequence,
+ ARRAY_SIZE(tas5754m_init_sequence));
+
+ if (ret != 0) {
+ dev_err(dev, "Failed to initialize TAS5754M: %d\n", ret);
+ goto err;
+ }
+
+ tas5754m->sclk = devm_clk_get(dev, NULL);
+ if (PTR_ERR(tas5754m->sclk) == -EPROBE_DEFER) {
+ ret = -EPROBE_DEFER;
+ goto err;
+ }
+ if (!IS_ERR(tas5754m->sclk)) {
+ ret = clk_prepare_enable(tas5754m->sclk);
+ if (ret != 0) {
+ dev_err(dev, "Failed to enable SCLK: %d\n", ret);
+ goto err;
+ }
+ }
+
+ ret = snd_soc_register_component(dev,
+ &tas5754m_soc_component, &tas5754m_dai, 1);
+ if (ret != 0) {
+ dev_err(dev, "Failed to register CODEC: %d\n", ret);
+ goto err;
+ }
+
+ return 0;
+
+err:
+ return ret;
+
+}
+
+static int tas5754m_i2c_probe(struct i2c_client *i2c, const struct i2c_device_id *id)
+{
+ struct regmap *regmap;
+ struct regmap_config config = tas5754m_regmap;
+
+ /* enable auto-increment mode */
+ config.read_flag_mask = 0x80;
+ config.write_flag_mask = 0x80;
+
+ regmap = devm_regmap_init_i2c(i2c, &config);
+ if (IS_ERR(regmap))
+ return PTR_ERR(regmap);
+
+ return tas5754m_probe(&i2c->dev, regmap);
+}
+
+static int tas5754m_remove(struct device *dev)
+{
+ snd_soc_unregister_component(dev);
+
+ return 0;
+}
+
+static int tas5754m_i2c_remove(struct i2c_client *i2c)
+{
+ tas5754m_remove(&i2c->dev);
+
+ return 0;
+}
+
+static const struct i2c_device_id tas5754m_i2c_id[] = {
+ { "tas5754m", },
+ { }
+};
+MODULE_DEVICE_TABLE(i2c, tas5754m_i2c_id);
+
+#ifdef CONFIG_OF
+static const struct of_device_id tas5754m_of_match[] = {
+ { .compatible = "ti,tas5754m", },
+ { .compatible = "ti,tas5756m", },
+ { }
+};
+MODULE_DEVICE_TABLE(of, tas5754m_of_match);
+#endif
+
+static struct i2c_driver tas5754m_i2c_driver = {
+ .probe = tas5754m_i2c_probe,
+ .remove = tas5754m_i2c_remove,
+ .id_table = tas5754m_i2c_id,
+ .driver = {
+ .name = "tas5754m",
+ .of_match_table = of_match_ptr(tas5754m_of_match),
+ },
+};
+
+module_i2c_driver(tas5754m_i2c_driver);
+
+MODULE_AUTHOR("Joerg Schambacher <joerg(a)hifiberry.com>");
+MODULE_DESCRIPTION("TAS5754M Audio Amplifier Driver - Master mode only");
+MODULE_LICENSE("GPL");
diff --git a/sound/soc/codecs/tas5754m.h b/sound/soc/codecs/tas5754m.h
new file mode 100644
index 000000000000..492b8abede6c
--- /dev/null
+++ b/sound/soc/codecs/tas5754m.h
@@ -0,0 +1,259 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Driver for the TAS5754M DAC+amplifier combo devices
+ *
+ * Author: (copied from pcm512x.h)
+ * Mark Brown <broonie(a)kernel.org>
+ * Copyright 2014 Linaro Ltd
+ */
+
+#ifndef _SND_SOC_TAS5754M
+#define _SND_SOC_TAS5754M
+
+#include <linux/pm.h>
+#include <linux/regmap.h>
+
+#define TAS5754M_VIRT_BASE 0x000
+#define TAS5754M_PAGE_LEN 0x80
+#define TAS5754M_PAGE_BASE(n) (TAS5754M_VIRT_BASE + (TAS5754M_PAGE_LEN * n))
+
+#define TAS5754M_PAGE 0
+
+#define TAS5754M_RESET (TAS5754M_PAGE_BASE(0) + 1)
+#define TAS5754M_POWER (TAS5754M_PAGE_BASE(0) + 2)
+#define TAS5754M_MUTE (TAS5754M_PAGE_BASE(0) + 3)
+#define TAS5754M_PLL_EN (TAS5754M_PAGE_BASE(0) + 4)
+#define TAS5754M_SPI_MISO_FUNCTION (TAS5754M_PAGE_BASE(0) + 6)
+#define TAS5754M_DSP (TAS5754M_PAGE_BASE(0) + 7)
+#define TAS5754M_GPIO_EN (TAS5754M_PAGE_BASE(0) + 8)
+#define TAS5754M_BCLK_LRCLK_CFG (TAS5754M_PAGE_BASE(0) + 9)
+#define TAS5754M_DSP_GPIO_INPUT (TAS5754M_PAGE_BASE(0) + 10)
+#define TAS5754M_MASTER_MODE (TAS5754M_PAGE_BASE(0) + 12)
+#define TAS5754M_PLL_REF (TAS5754M_PAGE_BASE(0) + 13)
+#define TAS5754M_DAC_REF (TAS5754M_PAGE_BASE(0) + 14)
+#define TAS5754M_GPIO_DACIN (TAS5754M_PAGE_BASE(0) + 16)
+#define TAS5754M_GPIO_PLLIN (TAS5754M_PAGE_BASE(0) + 18)
+#define TAS5754M_SYNCHRONIZE (TAS5754M_PAGE_BASE(0) + 19)
+#define TAS5754M_PLL_COEFF_0 (TAS5754M_PAGE_BASE(0) + 20)
+#define TAS5754M_PLL_COEFF_1 (TAS5754M_PAGE_BASE(0) + 21)
+#define TAS5754M_PLL_COEFF_2 (TAS5754M_PAGE_BASE(0) + 22)
+#define TAS5754M_PLL_COEFF_3 (TAS5754M_PAGE_BASE(0) + 23)
+#define TAS5754M_PLL_COEFF_4 (TAS5754M_PAGE_BASE(0) + 24)
+#define TAS5754M_DSP_CLKDIV (TAS5754M_PAGE_BASE(0) + 27)
+#define TAS5754M_DAC_CLKDIV (TAS5754M_PAGE_BASE(0) + 28)
+#define TAS5754M_NCP_CLKDIV (TAS5754M_PAGE_BASE(0) + 29)
+#define TAS5754M_OSR_CLKDIV (TAS5754M_PAGE_BASE(0) + 30)
+#define TAS5754M_MASTER_CLKDIV_1 (TAS5754M_PAGE_BASE(0) + 32)
+#define TAS5754M_MASTER_CLKDIV_2 (TAS5754M_PAGE_BASE(0) + 33)
+#define TAS5754M_FS_SPEED_MODE (TAS5754M_PAGE_BASE(0) + 34)
+#define TAS5754M_IDAC_1 (TAS5754M_PAGE_BASE(0) + 35)
+#define TAS5754M_IDAC_2 (TAS5754M_PAGE_BASE(0) + 36)
+#define TAS5754M_ERROR_DETECT (TAS5754M_PAGE_BASE(0) + 37)
+#define TAS5754M_I2S_1 (TAS5754M_PAGE_BASE(0) + 40)
+#define TAS5754M_I2S_2 (TAS5754M_PAGE_BASE(0) + 41)
+#define TAS5754M_DAC_ROUTING (TAS5754M_PAGE_BASE(0) + 42)
+#define TAS5754M_DSP_PROGRAM (TAS5754M_PAGE_BASE(0) + 43)
+#define TAS5754M_CLKDET (TAS5754M_PAGE_BASE(0) + 44)
+#define TAS5754M_AUTO_MUTE (TAS5754M_PAGE_BASE(0) + 59)
+#define TAS5754M_DIGITAL_VOLUME_1 (TAS5754M_PAGE_BASE(0) + 60)
+#define TAS5754M_DIGITAL_VOLUME_2 (TAS5754M_PAGE_BASE(0) + 61)
+#define TAS5754M_DIGITAL_VOLUME_3 (TAS5754M_PAGE_BASE(0) + 62)
+#define TAS5754M_DIGITAL_MUTE_1 (TAS5754M_PAGE_BASE(0) + 63)
+#define TAS5754M_DIGITAL_MUTE_2 (TAS5754M_PAGE_BASE(0) + 64)
+#define TAS5754M_DIGITAL_MUTE_3 (TAS5754M_PAGE_BASE(0) + 65)
+#define TAS5754M_GPIO_OUTPUT_1 (TAS5754M_PAGE_BASE(0) + 80)
+#define TAS5754M_GPIO_OUTPUT_2 (TAS5754M_PAGE_BASE(0) + 81)
+#define TAS5754M_GPIO_OUTPUT_3 (TAS5754M_PAGE_BASE(0) + 82)
+#define TAS5754M_GPIO_OUTPUT_4 (TAS5754M_PAGE_BASE(0) + 83)
+#define TAS5754M_GPIO_OUTPUT_5 (TAS5754M_PAGE_BASE(0) + 84)
+#define TAS5754M_GPIO_OUTPUT_6 (TAS5754M_PAGE_BASE(0) + 85)
+#define TAS5754M_GPIO_CONTROL_1 (TAS5754M_PAGE_BASE(0) + 86)
+#define TAS5754M_GPIO_CONTROL_2 (TAS5754M_PAGE_BASE(0) + 87)
+#define TAS5754M_OVERFLOW (TAS5754M_PAGE_BASE(0) + 90)
+#define TAS5754M_RATE_DET_1 (TAS5754M_PAGE_BASE(0) + 91)
+#define TAS5754M_RATE_DET_2 (TAS5754M_PAGE_BASE(0) + 92)
+#define TAS5754M_RATE_DET_3 (TAS5754M_PAGE_BASE(0) + 93)
+#define TAS5754M_RATE_DET_4 (TAS5754M_PAGE_BASE(0) + 94)
+#define TAS5754M_CLOCK_STATUS (TAS5754M_PAGE_BASE(0) + 95)
+#define TAS5754M_ANALOG_MUTE_DET (TAS5754M_PAGE_BASE(0) + 108)
+#define TAS5754M_GPIN (TAS5754M_PAGE_BASE(0) + 119)
+#define TAS5754M_DIGITAL_MUTE_DET (TAS5754M_PAGE_BASE(0) + 120)
+
+#define TAS5754M_OUTPUT_AMPLITUDE (TAS5754M_PAGE_BASE(1) + 1)
+#define TAS5754M_ANALOG_GAIN_CTRL (TAS5754M_PAGE_BASE(1) + 2)
+#define TAS5754M_UNDERVOLTAGE_PROT (TAS5754M_PAGE_BASE(1) + 5)
+#define TAS5754M_ANALOG_MUTE_CTRL (TAS5754M_PAGE_BASE(1) + 6)
+#define TAS5754M_ANALOG_GAIN_BOOST (TAS5754M_PAGE_BASE(1) + 7)
+#define TAS5754M_VCOM_CTRL_1 (TAS5754M_PAGE_BASE(1) + 8)
+#define TAS5754M_VCOM_CTRL_2 (TAS5754M_PAGE_BASE(1) + 9)
+
+#define TAS5754M_CRAM_CTRL (TAS5754M_PAGE_BASE(44) + 1)
+
+#define TAS5754M_FLEX_A (TAS5754M_PAGE_BASE(253) + 63)
+#define TAS5754M_FLEX_B (TAS5754M_PAGE_BASE(253) + 64)
+
+#define TAS5754M_MAX_REGISTER (TAS5754M_PAGE_BASE(253) + 64)
+
+/* Page 0, Register 1 - reset */
+#define TAS5754M_RSTR (1 << 0)
+#define TAS5754M_RSTM (1 << 4)
+
+/* Page 0, Register 2 - power */
+#define TAS5754M_RQPD (1 << 0)
+#define TAS5754M_RQPD_SHIFT 0
+#define TAS5754M_RQST (1 << 4)
+#define TAS5754M_RQST_SHIFT 4
+
+/* Page 0, Register 3 - mute */
+#define TAS5754M_RQMR (1 << 0)
+#define TAS5754M_RQMR_SHIFT 0
+#define TAS5754M_RQML (1 << 4)
+#define TAS5754M_RQML_SHIFT 4
+
+/* Page 0, Register 4 - PLL */
+#define TAS5754M_PLLE (1 << 0)
+#define TAS5754M_PLLE_SHIFT 0
+#define TAS5754M_PLCK (1 << 4)
+#define TAS5754M_PLCK_SHIFT 4
+
+/* Page 0, Register 7 - DSP */
+#define TAS5754M_SDSL (1 << 0)
+#define TAS5754M_SDSL_SHIFT 0
+#define TAS5754M_DEMP (1 << 4)
+#define TAS5754M_DEMP_SHIFT 4
+
+/* Page 0, Register 8 - GPIO output enable */
+#define TAS5754M_G1OE (1 << 0)
+#define TAS5754M_G2OE (1 << 1)
+#define TAS5754M_G3OE (1 << 2)
+#define TAS5754M_G4OE (1 << 3)
+#define TAS5754M_G5OE (1 << 4)
+#define TAS5754M_G6OE (1 << 5)
+
+/* Page 0, Register 9 - BCK, LRCLK configuration */
+#define TAS5754M_LRKO (1 << 0)
+#define TAS5754M_LRKO_SHIFT 0
+#define TAS5754M_BCKO (1 << 4)
+#define TAS5754M_BCKO_SHIFT 4
+#define TAS5754M_BCKP (1 << 5)
+#define TAS5754M_BCKP_SHIFT 5
+
+/* Page 0, Register 12 - Master mode BCK, LRCLK reset */
+#define TAS5754M_RLRK (1 << 0)
+#define TAS5754M_RLRK_SHIFT 0
+#define TAS5754M_RBCK (1 << 1)
+#define TAS5754M_RBCK_SHIFT 1
+
+/* Page 0, Register 13 - PLL reference */
+#define TAS5754M_SREF (7 << 4)
+#define TAS5754M_SREF_SHIFT 4
+#define TAS5754M_SREF_SCK (0 << 4)
+#define TAS5754M_SREF_BCK (1 << 4)
+#define TAS5754M_SREF_GPIO (3 << 4)
+
+/* Page 0, Register 14 - DAC reference */
+#define TAS5754M_SDAC (7 << 4)
+#define TAS5754M_SDAC_SHIFT 4
+#define TAS5754M_SDAC_MCK (0 << 4)
+#define TAS5754M_SDAC_PLL (1 << 4)
+#define TAS5754M_SDAC_SCK (3 << 4)
+#define TAS5754M_SDAC_BCK (4 << 4)
+#define TAS5754M_SDAC_GPIO (5 << 4)
+
+/* Page 0, Register 16, 18 - GPIO source for DAC, PLL */
+#define TAS5754M_GREF (7 << 0)
+#define TAS5754M_GREF_SHIFT 0
+#define TAS5754M_GREF_GPIO1 (0 << 0)
+#define TAS5754M_GREF_GPIO2 (1 << 0)
+#define TAS5754M_GREF_GPIO3 (2 << 0)
+#define TAS5754M_GREF_GPIO4 (3 << 0)
+#define TAS5754M_GREF_GPIO5 (4 << 0)
+#define TAS5754M_GREF_GPIO6 (5 << 0)
+
+/* Page 0, Register 19 - synchronize */
+#define TAS5754M_RQSY (1 << 0)
+#define TAS5754M_RQSY_RESUME (0 << 0)
+#define TAS5754M_RQSY_HALT (1 << 0)
+
+/* Page 0, Register 34 - fs speed mode */
+#define TAS5754M_FSSP (3 << 0)
+#define TAS5754M_FSSP_SHIFT 0
+#define TAS5754M_FSSP_48KHZ (0 << 0)
+#define TAS5754M_FSSP_96KHZ (1 << 0)
+#define TAS5754M_FSSP_192KHZ (2 << 0)
+#define TAS5754M_FSSP_384KHZ (3 << 0)
+
+/* Page 0, Register 37 - Error detection */
+#define TAS5754M_IPLK (1 << 0)
+#define TAS5754M_DCAS (1 << 1)
+#define TAS5754M_IDCM (1 << 2)
+#define TAS5754M_IDCH (1 << 3)
+#define TAS5754M_IDSK (1 << 4)
+#define TAS5754M_IDBK (1 << 5)
+#define TAS5754M_IDFS (1 << 6)
+
+/* Page 0, Register 40 - I2S configuration */
+#define TAS5754M_ALEN (3 << 0)
+#define TAS5754M_ALEN_SHIFT 0
+#define TAS5754M_ALEN_16 (0 << 0)
+#define TAS5754M_ALEN_20 (1 << 0)
+#define TAS5754M_ALEN_24 (2 << 0)
+#define TAS5754M_ALEN_32 (3 << 0)
+#define TAS5754M_AFMT (3 << 4)
+#define TAS5754M_AFMT_SHIFT 4
+#define TAS5754M_AFMT_I2S (0 << 4)
+#define TAS5754M_AFMT_DSP (1 << 4)
+#define TAS5754M_AFMT_RTJ (2 << 4)
+#define TAS5754M_AFMT_LTJ (3 << 4)
+
+/* Page 0, Register 42 - DAC routing */
+#define TAS5754M_AUPR_SHIFT 0
+#define TAS5754M_AUPL_SHIFT 4
+
+/* Page 0, Register 59 - auto mute */
+#define TAS5754M_ATMR_SHIFT 0
+#define TAS5754M_ATML_SHIFT 4
+
+/* Page 0, Register 63 - ramp rates */
+#define TAS5754M_VNDF_SHIFT 6
+#define TAS5754M_VNDS_SHIFT 4
+#define TAS5754M_VNUF_SHIFT 2
+#define TAS5754M_VNUS_SHIFT 0
+
+/* Page 0, Register 64 - emergency ramp rates */
+#define TAS5754M_VEDF_SHIFT 6
+#define TAS5754M_VEDS_SHIFT 4
+
+/* Page 0, Register 65 - Digital mute enables */
+#define TAS5754M_ACTL_SHIFT 2
+#define TAS5754M_AMLE_SHIFT 1
+#define TAS5754M_AMRE_SHIFT 0
+
+/* Page 0, Register 80-85, GPIO output selection */
+#define TAS5754M_GxSL (31 << 0)
+#define TAS5754M_GxSL_SHIFT 0
+#define TAS5754M_GxSL_OFF (0 << 0)
+#define TAS5754M_GxSL_DSP (1 << 0)
+#define TAS5754M_GxSL_REG (2 << 0)
+#define TAS5754M_GxSL_AMUTB (3 << 0)
+#define TAS5754M_GxSL_AMUTL (4 << 0)
+#define TAS5754M_GxSL_AMUTR (5 << 0)
+#define TAS5754M_GxSL_CLKI (6 << 0)
+#define TAS5754M_GxSL_SDOUT (7 << 0)
+#define TAS5754M_GxSL_ANMUL (8 << 0)
+#define TAS5754M_GxSL_ANMUR (9 << 0)
+#define TAS5754M_GxSL_PLLLK (10 << 0)
+#define TAS5754M_GxSL_CPCLK (11 << 0)
+#define TAS5754M_GxSL_UV0_7 (14 << 0)
+#define TAS5754M_GxSL_UV0_3 (15 << 0)
+#define TAS5754M_GxSL_PLLCK (16 << 0)
+
+/* Page 1, Register 2 - analog volume control */
+#define TAS5754M_RAGN_SHIFT 0
+#define TAS5754M_LAGN_SHIFT 4
+
+/* Page 1, Register 7 - analog boost control */
+#define TAS5754M_AGBR_SHIFT 0
+#define TAS5754M_AGBL_SHIFT 4
+
+#endif
base-commit: f6274b06e326d8471cdfb52595f989a90f5e888f
--
2.17.1
6 months