linux/drivers/staging
Zicheng Qu e5c87f33b5 staging: iio: ad9832: Correct phase range check
commit 4636e859eb upstream.

User Perspective:
When a user sets the phase value, the ad9832_write_phase() is called.
The phase register has a 12-bit resolution, so the valid range is 0 to
4095. If the phase offset value of 4096 is input, it effectively exactly
equals 0 in the lower 12 bits, meaning no offset.

Reasons for the Change:
1) Original Condition (phase > BIT(AD9832_PHASE_BITS)):
This condition allows a phase value equal to 2^12, which is 4096.
However, this value exceeds the valid 12-bit range, as the maximum valid
phase value should be 4095.
2) Modified Condition (phase >= BIT(AD9832_PHASE_BITS)):
Ensures that the phase value is within the valid range, preventing
invalid datafrom being written.

Impact on Subsequent Logic: st->data = cpu_to_be16(addr | phase):
If the phase value is 2^12, i.e., 4096 (0001 0000 0000 0000), and addr
is AD9832_REG_PHASE0 (1100 0000 0000 0000), then addr | phase results in
1101 0000 0000 0000, occupying DB12. According to the section of WRITING
TO A PHASE REGISTER in the datasheet, the MSB 12 PHASE0 bits should be
DB11. The original condition leads to incorrect DB12 usage, which
contradicts the datasheet and could pose potential issues for future
updates if DB12 is used in such related cases.

Fixes: ea707584ba ("Staging: IIO: DDS: AD9832 / AD9835 driver")
Cc: stable@vger.kernel.org
Signed-off-by: Zicheng Qu <quzicheng@huawei.com>
Link: https://patch.msgid.link/20241107011015.2472600-3-quzicheng@huawei.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2025-01-17 13:36:20 +01:00
..
axis-fifo staging: Explicitly include correct DT includes 2023-07-27 10:01:07 +02:00
board staging: board: Fix uninitialized spinlock when attaching genpd 2021-07-21 11:22:15 +02:00
emxx_udc staging: emxx_udc: Convert to platform remove callback returning void 2023-04-03 21:49:54 +02:00
fbtft Linux 6.5-rc7 2023-08-24 07:26:06 +10:00
fieldbus staging: fieldbus: arcx-anybus: Remove redundant of_match_ptr() 2023-08-11 23:28:04 +02:00
gdm724x tty: gdm724x: use min_t() for size_t varable and a constant 2023-08-22 14:53:53 +02:00
greybus greybus: arche-ctrl: move device table to its right location 2024-06-12 11:12:17 +02:00
iio staging: iio: ad9832: Correct phase range check 2025-01-17 13:36:20 +01:00
ks7010 staging: ks7010: disable bh on tx_dev_lock 2024-08-29 17:33:26 +02:00
media media: atomisp: Add check for rgby_data memory allocation failure 2024-12-09 10:31:58 +01:00
most staging: Explicitly include correct DT includes 2023-07-27 10:01:07 +02:00
nvec staging: nvec_ps2: Convert to platform remove callback returning void 2023-04-03 21:49:55 +02:00
octeon staging: octeon: delete my name from TODO contact 2023-05-08 16:09:33 +02:00
olpc_dcon staging: olpc_dcon: Switch i2c driver back to use .probe() 2023-05-28 10:15:27 +01:00
pi433 staging: Explicitly include correct DT includes 2023-07-27 10:01:07 +02:00
qlge Staging: qlge: Fix indentation in conditional statement 2023-03-16 09:44:31 +01:00
rtl8192e staging: rtl8192e: Annotate struct rtllib_txb with __counted_by 2023-08-22 15:48:05 +02:00
rtl8192u staging: rtl8192u: Fix keyidx assignment within if condition 2023-07-27 10:00:02 +02:00
rtl8712 staging: rtl8712: fix race condition 2023-08-04 16:20:13 +02:00
rtl8723bs staging: rtl8723bs: Use helpers to check broadcast and multicast Ether addresses 2023-08-22 15:47:17 +02:00
rts5208 staging: rts5208: Correct line ending with '(' 2023-07-27 10:00:19 +02:00
sm750fb Staging driver changes for 6.6-rc1 2023-09-01 09:27:29 -07:00
vc04_services staging: vchiq_arm: Use devm_kzalloc() for vchiq_arm_state allocation 2024-11-22 15:38:35 +01:00
vme_user staging: vme_user: added bound check to geoid 2024-10-17 15:24:20 +02:00
vt6655 staging: vt6655: replace camel case by snake case 2023-08-22 15:44:33 +02:00
vt6656 staging: vt6656: remove unused vnt_get_current_tsf() function 2023-03-17 08:07:23 +01:00
wlan-ng Fix nomenclature for USB and PCI wireless devices 2023-08-25 12:56:49 +03:00
Kconfig staging: r8188eu: delete driver 2023-03-09 10:06:28 +01:00
Makefile staging: r8188eu: delete driver 2023-03-09 10:06:28 +01:00