brintos

brintos / linux-shallow public Read only

0
0
Text · 1.6 KiB · 26dd5b3 Raw
94 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2 3/*4 * netup-eeprom.c5 *6 * 24LC02 EEPROM driver in conjunction with NetUP Dual DVB-S2 CI card7 *8 * Copyright (C) 2009 NetUP Inc.9 * Copyright (C) 2009 Abylay Ospan <aospan@netup.ru>10 */11 12#13#include "cx23885.h"14#include "netup-eeprom.h"15 16#define EEPROM_I2C_ADDR 0x5017 18int netup_eeprom_read(struct i2c_adapter *i2c_adap, u8 addr)19{20	int ret;21	unsigned char buf[2];22 23	/* Read from EEPROM */24	struct i2c_msg msg[] = {25		{26			.addr	= EEPROM_I2C_ADDR,27			.flags	= 0,28			.buf	= &buf[0],29			.len	= 130		}, {31			.addr	= EEPROM_I2C_ADDR,32			.flags	= I2C_M_RD,33			.buf	= &buf[1],34			.len	= 135		}36 37	};38 39	buf[0] = addr;40	buf[1] = 0x0;41 42	ret = i2c_transfer(i2c_adap, msg, 2);43 44	if (ret != 2) {45		pr_err("eeprom i2c read error, status=%d\n", ret);46		return -1;47	}48 49	return buf[1];50};51 52int netup_eeprom_write(struct i2c_adapter *i2c_adap, u8 addr, u8 data)53{54	int ret;55	unsigned char bufw[2];56 57	/* Write into EEPROM */58	struct i2c_msg msg[] = {59		{60			.addr	= EEPROM_I2C_ADDR,61			.flags	= 0,62			.buf	= &bufw[0],63			.len	= 264		}65	};66 67	bufw[0] = addr;68	bufw[1] = data;69 70	ret = i2c_transfer(i2c_adap, msg, 1);71 72	if (ret != 1) {73		pr_err("eeprom i2c write error, status=%d\n", ret);74		return -1;75	}76 77	mdelay(10); /* prophylactic delay, datasheet write cycle time = 5 ms */78	return 0;79};80 81void netup_get_card_info(struct i2c_adapter *i2c_adap,82				struct netup_card_info *cinfo)83{84	int i, j;85 86	cinfo->rev =  netup_eeprom_read(i2c_adap, 63);87 88	for (i = 64, j = 0; i < 70; i++, j++)89		cinfo->port[0].mac[j] =  netup_eeprom_read(i2c_adap, i);90 91	for (i = 70, j = 0; i < 76; i++, j++)92		cinfo->port[1].mac[j] =  netup_eeprom_read(i2c_adap, i);93};94