Skip to content

Commit eebc32c

Browse files
committed
wifi: mt76: allow loading eeprom from file
1 parent 81076ff commit eebc32c

File tree

1 file changed

+46
-0
lines changed
  • drivers/net/wireless/mediatek/mt76

1 file changed

+46
-0
lines changed

drivers/net/wireless/mediatek/mt76/eeprom.c

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,48 @@ int mt76_get_of_data_from_nvmem(struct mt76_dev *dev, void *eep,
144144
}
145145
EXPORT_SYMBOL_GPL(mt76_get_of_data_from_nvmem);
146146

147+
static int
148+
mt76_get_eeprom_file(struct mt76_dev *dev, int len)
149+
{
150+
char path[64]="";
151+
struct file *fp;
152+
loff_t pos=0;
153+
int ret;
154+
struct inode *inode = NULL;
155+
loff_t size;
156+
157+
ret = snprintf(path,sizeof(path),"/lib/firmware/mediatek/%s_rf.bin",dev->dev->driver->name);
158+
if(ret<0)
159+
return -EINVAL;
160+
dev_info(dev->dev,"Load eeprom: %s\n",path);
161+
fp = filp_open(path, O_RDONLY, 0);
162+
if (IS_ERR(fp)) {
163+
dev_info(dev->dev,"Open eeprom file failed: %s\n",path);
164+
return -ENOENT;
165+
}
166+
167+
inode = file_inode(fp);
168+
if ((!S_ISREG(inode->i_mode) && !S_ISBLK(inode->i_mode))) {
169+
printk(KERN_ALERT "invalid file type: %s\n", path);
170+
return -ENOENT;
171+
}
172+
size = i_size_read(inode->i_mapping->host);
173+
if (size < 0)
174+
{
175+
printk(KERN_ALERT "failed getting size of %s size:%lld \n",path,size);
176+
return -ENOENT;
177+
}
178+
ret = kernel_read(fp, dev->eeprom.data, len, &pos);
179+
if(ret < size){
180+
dev_info(dev->dev,"Load eeprom ERR, count %d byte (len:%d)\n",ret,len);
181+
return -ENOENT;
182+
}
183+
filp_close(fp, 0);
184+
dev_info(dev->dev,"Load eeprom OK, count %d byte\n",ret);
185+
186+
return 0;
187+
}
188+
147189
static int mt76_get_of_eeprom(struct mt76_dev *dev, void *eep, int len)
148190
{
149191
struct device_node *np = dev->dev->of_node;
@@ -160,6 +202,10 @@ static int mt76_get_of_eeprom(struct mt76_dev *dev, void *eep, int len)
160202
if (!ret)
161203
return 0;
162204

205+
ret=mt76_get_eeprom_file(dev, len);
206+
if (!ret)
207+
return 0;
208+
163209
return mt76_get_of_data_from_nvmem(dev, eep, "eeprom", len);
164210
}
165211

0 commit comments

Comments
 (0)