at24 {
compatible = "at24,24c32";
dev_name = "at24";
reg = <0x50>;
status = "okay";
pagesize = <8>;
write_ops_interval= <10>;/*Write operation interval at24c32 at24c64 is 10ms at24c128 is 5ms in spec*/
wp_gpios = <&gpio GPIOY_7 GPIO_ACTIVE_HIGH>;
write_gpio_port_status = <0>;
};
void at24_dt_parse(struct i2c_client *client , struct at24_platform_data *chip)
{
int ret;
enum of_gpio_flags flags;
struct device_node *node = client->dev.of_node;
ret = of_property_read_u32(node, "write_ops_interval",
&(chip->write_ops_interval));
if (ret)
pr_info("faild to get write interval time !\n");
chip->wp_pin_desc = of_get_named_gpiod_flags(node , "wp_gpios" ,
0 , &flags);
chip->wp_port = desc_to_gpio(chip->wp_pin_desc);
ret = of_property_read_u32(node , "write_gpio_port_status",
&(chip->wp_port_level));
if (ret)
pr_info("faild to get write interval time !\n");
if (!chip->wp_port_level)
chip->wp_port_level_save = chip->wp_port_level = 0;
else
chip->wp_port_level_save = chip->wp_port_level = 1;
chip->wp_port_level = !chip->wp_port_level_save;
at24_wp_enable(chip);
pr_info("EEPROM_AT%s " , client->name);
pr_info("write protect port level is %d" , chip->wp_port);
pr_info("wp_port=%d write_ops_interval=%dms\n" ,
chip->wp_port ,
chip->write_ops_interval);
}