+static int
+rc632_mifare_set_key_ee(struct rfid_asic_handle *h, unsigned int addr)
+{
+ int ret;
+ u_int8_t cmd_addr[2];
+ u_int8_t reg;
+
+ if (addr > 0xffff - RFID_MIFARE_KEY_CODED_LEN)
+ return -EINVAL;
+
+ cmd_addr[0] = addr & 0xff; /* LSB */
+ cmd_addr[1] = (addr >> 8) & 0xff; /* MSB */
+
+ /* Terminate probably running command */
+ ret = rc632_reg_write(h, RC632_REG_COMMAND, RC632_CMD_IDLE);
+ if (ret < 0)
+ return ret;
+
+ /* Write the key address to the FIFO */
+ ret = rc632_fifo_write(h, 2, cmd_addr, 0x03);
+ if (ret < 0)
+ return ret;
+
+ ret = rc632_reg_write(h, RC632_REG_COMMAND, RC632_CMD_LOAD_KEY_E2);
+ if (ret < 0)
+ return ret;
+
+ ret = rc632_timer_set(h, RC632_TMO_AUTH1);
+ if (ret < 0)
+ return ret;
+
+ //ret = rc632_wait_idle(h, RC632_TMO_AUTH1);
+ ret = rc632_wait_idle_timer(h);
+ if (ret < 0)
+ return ret;
+
+ ret = rc632_reg_read(h, RC632_REG_ERROR_FLAG, ®);
+ if (ret < 0)
+ return ret;
+
+ if (reg & RC632_ERR_FLAG_KEY_ERR)
+ return -EINVAL;
+
+ return 0;
+}
+