static int dm355evm_rtc_set_time(struct device *dev, struct rtc_time *tm) { union evm_time time; unsigned long value; int status; rtc_tm_to_time(tm, &value); time.value = cpu_to_le32(value); dev_dbg(dev, "write timestamp %08x\n", time.value); status = dm355evm_msp_write(time.bytes[0], DM355EVM_MSP_RTC_0); if (status < 0) return status; status = dm355evm_msp_write(time.bytes[1], DM355EVM_MSP_RTC_1); if (status < 0) return status; status = dm355evm_msp_write(time.bytes[2], DM355EVM_MSP_RTC_2); if (status < 0) return status; status = dm355evm_msp_write(time.bytes[3], DM355EVM_MSP_RTC_3); if (status < 0) return status; return 0; }
static int dm355evm_rtc_set_time(struct device *dev, struct rtc_time *tm) { union evm_time time; unsigned long value; int status; value = rtc_tm_to_time64(tm); time.value = cpu_to_le32(value); dev_dbg(dev, "write timestamp %08x\n", time.value); /* * REVISIT handle non-atomic writes ... maybe just retry until * byte[1] sticks (no rollover)? */ status = dm355evm_msp_write(time.bytes[0], DM355EVM_MSP_RTC_0); if (status < 0) return status; status = dm355evm_msp_write(time.bytes[1], DM355EVM_MSP_RTC_1); if (status < 0) return status; status = dm355evm_msp_write(time.bytes[2], DM355EVM_MSP_RTC_2); if (status < 0) return status; status = dm355evm_msp_write(time.bytes[3], DM355EVM_MSP_RTC_3); if (status < 0) return status; return 0; }
static int msp_gpio_out(struct gpio_chip *chip, unsigned offset, int value) { int mask, bits; if (MSP_GPIO_REG(offset) != DM355EVM_MSP_LED) return -EINVAL; mask = MSP_GPIO_MASK(offset); bits = msp_led_cache; bits &= ~mask; if (value) bits |= mask; msp_led_cache = bits; return dm355evm_msp_write(bits, DM355EVM_MSP_LED); }
static int msp_gpio_out(struct gpio_chip *chip, unsigned offset, int value) { int mask, bits; /* NOTE: there are some other signals that could be * packaged as output GPIOs, but they aren't as useful * as the LEDs ... so for now we don't. */ if (MSP_GPIO_REG(offset) != DM355EVM_MSP_LED) return -EINVAL; mask = MSP_GPIO_MASK(offset); bits = msp_led_cache; bits &= ~mask; if (value) bits |= mask; msp_led_cache = bits; return dm355evm_msp_write(bits, DM355EVM_MSP_LED); }