int ths8200_is_present(void) { __u8 data; int err; data = 0x02; err = davinci_i2c_write(1, &data, THS8200_I2C_ADDR); if ( err != 0) { return 0; } err = davinci_i2c_read(1, &data, THS8200_I2C_ADDR); if ( err != 0) { return 0; } if (data != 4) // Value read by Neal { return 0; } // Everthing check out, return 1 (TRUE) return 1; }
static int evm_read_time(struct device *dev, struct rtc_time *tm) { char rtcdata [9]; rtcdata[0] = 2; rtcdata[1] = 1; davinci_i2c_write(2, rtcdata, 0x23); msleep(1); davinci_i2c_read(9, rtcdata, 0x23); msleep(1); /* FIXME the RTC reports 12-hour time, without an AM/PM indicator, * but Linux requires that we report 24 hour time... */ tm->tm_year = BCD_TO_BIN(rtcdata[3]) * 100 + BCD_TO_BIN(rtcdata[2]) - 1900; tm->tm_mon = BCD_TO_BIN(rtcdata[4]); tm->tm_mday = BCD_TO_BIN(rtcdata[5]); tm->tm_hour = BCD_TO_BIN(rtcdata[6]); tm->tm_min = BCD_TO_BIN(rtcdata[7]); tm->tm_sec = BCD_TO_BIN(rtcdata[8]); return 0; }
int set_cpld_for_tvp7002() { int err = 0; u8 val; err = davinci_i2c_read(1, &val, CPLD_VIDEO_REG); if(err) return err; val |= 0x10; err = davinci_i2c_write(1, &val, CPLD_VIDEO_REG); return err; }
int set_cpld_for_tvp5147() { int err = 0; u8 val; err = davinci_i2c_read(1, &val, CPLD_VIDEO_REG); if(err) return err; val &= 0xEF; err = davinci_i2c_write(1, &val, CPLD_VIDEO_REG); return err; }
int dm644x_mmc_get_ro(int index) { char input_state[4] = { 2, 4, 0, 0 }; davinci_i2c_write(2, input_state, 0x23); udelay(1000); davinci_i2c_read(4, input_state, 0x23); udelay(1000); return input_state[3] & 0x40; }
int set_vid_in_mode_for_tvp5147() { int err = 0; u8 val; unsigned int value; unsigned int sys_vsclk = (unsigned int)IO_ADDRESS(0x01C40038); err = davinci_i2c_read(1, &val, CPLD_VIDEO_REG); if(err) return err; val &= 0xDF; err = davinci_i2c_write(1, &val, CPLD_VIDEO_REG); if(err) return err; value = inl(sys_vsclk); value |= (1<<4); outl(value, sys_vsclk); return err; }
static int read_ir_values(void) { int err; message[0] = 2; message[1] = 2; err = davinci_i2c_write(2, message, 0x23); if (err) return err; msleep(1); err = davinci_i2c_read(MESSAGE_LENGTH, message, 0x23); if (err) return err; msleep(1); next_value = 0; return 0; }
int davinci_i2c_expander_op(enum i2c_expander_pins pin, unsigned val) { u16 address = davinci_i2c_expander.address; u8 data = 0; int err; if (val > 1) return -EINVAL; if (davinci_i2c_expander.validate != NULL) { err = davinci_i2c_expander.validate(pin); if (err) return err; } mutex_lock(&expander_lock); err = davinci_i2c_read(1, &data, address); if (err) goto exit; if (davinci_i2c_expander.special != NULL) { err = davinci_i2c_expander.special(pin, val); if (err) goto exit; } data &= ~(1 << pin); data |= val << pin; err = davinci_i2c_write(1, &data, address); exit: mutex_unlock(&expander_lock); return err; }
int set_vid_out_mode_for_hd() { int err = 0; u8 val; unsigned int value; unsigned int sys_vsclk = (unsigned int)IO_ADDRESS(0x01C40038); err = davinci_i2c_read(1, &val, CPLD_VIDEO_REG); if(err) return err; val |= 0x40; err = davinci_i2c_write(1, &val, CPLD_VIDEO_REG); if(err) return err; value = inl(sys_vsclk); value &= ~(7<<8); value &= ~(7<<12); value |= (2<<8); value |= (2<<12); outl(value, sys_vsclk); return err; }