def process_call(self, addr, cmd, val):
        """process_call(addr, cmd, val)

        Perform SMBus Process Call transaction.

        Note: although i2c_smbus_process_call returns a value, according to
        smbusmodule.c this method does not return a value by default.

        Set _compat = False on the SMBus instance to get a return value.
        """
        self._set_addr(addr)
        ret = SMBUS.i2c_smbus_process_call(self._fd,
                                           ffi.cast("__u8", cmd),
                                           ffi.cast("__u16", val))
        if ret == -1:
            raise IOError(ffi.errno)
        if self._compat:
            return ret
process_call(addr, cmd, val)

        Perform SMBus Process Call transaction.

        Note: although i2c_smbus_process_call returns a value, according to
        smbusmodule.c this method does not return a value by default.

        Set _compat = False on the SMBus instance to get a return value.