Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mfd: add ezx_pcap_setbits

Provides an atomic set_bits functions, as needed by the pcap-regulator
driver.

Signed-off-by: Daniel Ribeiro <drwyrm@gmail.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>

authored by

Daniel Ribeiro and committed by
Samuel Ortiz
e9a22635 b1148fd4

+24
+23
drivers/mfd/ezx-pcap.c
··· 107 107 } 108 108 EXPORT_SYMBOL_GPL(ezx_pcap_read); 109 109 110 + int ezx_pcap_set_bits(struct pcap_chip *pcap, u8 reg_num, u32 mask, u32 val) 111 + { 112 + int ret; 113 + u32 tmp = PCAP_REGISTER_READ_OP_BIT | 114 + (reg_num << PCAP_REGISTER_ADDRESS_SHIFT); 115 + 116 + mutex_lock(&pcap->io_mutex); 117 + ret = ezx_pcap_putget(pcap, &tmp); 118 + if (ret) 119 + goto out_unlock; 120 + 121 + tmp &= (PCAP_REGISTER_VALUE_MASK & ~mask); 122 + tmp |= (val & mask) | PCAP_REGISTER_WRITE_OP_BIT | 123 + (reg_num << PCAP_REGISTER_ADDRESS_SHIFT); 124 + 125 + ret = ezx_pcap_putget(pcap, &tmp); 126 + out_unlock: 127 + mutex_unlock(&pcap->io_mutex); 128 + 129 + return ret; 130 + } 131 + EXPORT_SYMBOL_GPL(ezx_pcap_set_bits); 132 + 110 133 /* IRQ */ 111 134 int irq_to_pcap(struct pcap_chip *pcap, int irq) 112 135 {
+1
include/linux/mfd/ezx-pcap.h
··· 25 25 26 26 int ezx_pcap_write(struct pcap_chip *, u8, u32); 27 27 int ezx_pcap_read(struct pcap_chip *, u8, u32 *); 28 + int ezx_pcap_set_bits(struct pcap_chip *, u8, u32, u32); 28 29 int pcap_to_irq(struct pcap_chip *, int); 29 30 int irq_to_pcap(struct pcap_chip *, int); 30 31 int pcap_adc_async(struct pcap_chip *, u8, u32, u8[], void *, void *);